可以通过散列映射,或者排序夹逼解决。
排序夹逼:
void TwoSum(int a[], unsigned int length, int sum)
{
// sort(s, s+n); 如果数组非有序,排序O(nlogn)
int begin = 0;
int end = length - 1;
// 两个指针两端扫描
while (begin < end)
{
long currSum = a[begin] + a[end];
if (currSum == sum)
{
// 题目只要求输出满足条件的任意一对即可
printf("%d %d\n", a[begin], a[end]);
// 如果需要所有满足条件的数对,则需要加上下面两条语句:
// begin++;
// end--;
break;
}
else
{
if (currSum < sum)
{
begin++;
}
else
{
end--;
}
}
}
}