two pointers算法
给定一个递增的正整数序列和一个正整数 M,求序列中的两个不同位置的数 a 和 b,使得它们的和恰好为 M,输出所有满足条件的方案。
two pointers算法利用枚举有效降低复杂度
令下标 i 的初值为0,下标 j 的初值为 n-1,即令 i、j 分别指向序列的第一个元素和最后一个元素,接下来根据 a[i]+a[j] 与 M 的大小来进行下面三种选择,使 i 不断向右移动、使 j 不断向左移动,直到 i≥j 成立
- 若 a[i]+a[j]==M ,说明找到了其中一种方案,令 i=i+1、j=j-1。
- 若 a[i]+a[j]>M,令 j=j-1。
- 若 a[i]+a[j]<M,令 i=i+1。
重复执行,直到 i>j
while(i<=j)
{
if(a[i]+a[j]==M)
{
i++;j++;
}
else if(a[i]+a[j]>M)
{
j--;
}
else
{
i++;
}
}