解决的问题
- 给定一个递增的正整数序列和一个正整数M,求序列中两个不同位置的数a和b,使得他们的和恰好等于M,输出所有满足条件的方案
- 将两个有序的子序列归并为一个单一的有序序列
直观解释
用两个下标i,j 对序列进行扫描(可以同向扫描,亦可以异向扫描),以较低的复杂度解决问题
方法的示例代码
void find(int a[],int length, int M){
int i = 0;
int j = length -1;
while(i<j){
if(a[i] + a[j] == M){
printf("%d %d\n",a[i],a[j]);
i++;
j--;
}
if(a[i] + a[j] > M){
j--;
}
if(a[i] + a[j] < M){
i++;
}
}
}