1、首先转载一部分two points 的基础吧
https://www.cnblogs.com/hxtblogs/p/7654536.html
这个简单的例子中 两个指针一个从前,一个从后,进行扫描。从而提高了程序的效率。
暴力求解:
for(int i = 0;i < n; i ++){
for(int j = i+1; j < n; j++){
if(a[i]+a[j]==M){
cout<<a[i]<<" "<<a[j]<<endl;
}
}
}
使用 two points
while(i<j){
if(a[i]+a[j]==M){
cout<<a[i]<<" "<<a[j]<<endl;
i++;
j--;
}else if(a[i]+a[j]<M){
i++;
}else{
j--;
}
}
2 判断链表里有没有环,使用一个快指针一个慢指针。
快指针每次.next.next,慢指针.next。如果有环快指针和慢指针总会遇到,返回TRUE。如果没有环,快指针会最终到达末尾。
总结:
很显然使用two points 思想需要根据具体题目调节两个指针的移动。使用two points 思想有时候可以避免for循环。使用two points 处理很多问题时,首先要求数据有序。