// 首先,将数组排序。 比如排序后得到的数组a是:-2 -1 0 3 5 6 7 9 13 14。
// 然后使用low和high 两个下标指向数组的首尾元素。如果a[low]+a[high] >
// sum,那么说明a[high]
// 和数组中的任何其它一个数的和都一定大于sum(因为它和最小的a[low]相加都大于s
// um)。 因此,a[high]不会与数组中任何一个数相加得到sum,于是我们可以直接不
// 要它, 即让high向前移动一位。同样的,如果a[low]+a[high] <
// sum,那么说明a[low]
// 和数组中的任何其它一个数的和都一定小于sum(因为它和最大的a[high]相加都小于
// sum)。 因此,我们也可以直接不要它,让low向前移动一位。如果a[low]+a[high]
// 等于sum, 则输出。当low小于high时,不断地重复上面的操作即可。
void PrintPairSum(int a[], int n, int sum){
if(a==NULL || n<2) return;
sort(a, a+n);
int low = 0, high = n-1;
while(low < high){
if(a[low]+a[high] > sum)
--high;
else if(a[low]+a[high] < sum)
++low;
else{
cout<<a[low]<<" "<<a[high]<<endl;
++low; --high;
}
}
}
网友评论