和为S的两个数字

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。

 1 //////////////////////和为S的两个数字//////////////////////////////////
 2 
 3 bool FindNumbersWithSum(int* data , int length , int sum)
 4 {
 5     if (data == NULL || length < 2)
 6     {
 7         return false ;
 8     }
 9     int begin = 0 ;
10     int end = length - 1 ;
11     while (begin < end)
12     {
13         long long CurSum = data[begin] + data[end];
14         if (CurSum == sum)
15         {
16             cout<<data[begin]<<"+"<<data[end]<<endl;
17             return true ;
18         }
19         else if (CurSum > sum)//当前和大于 sum ,end指针向后走一位
20         {
21             end--;
22         }
23         else //当前和小于 sum ,begin指针向前走一位
24         {
25             begin++;
26         }
27     }
28     return false ;
29 }
原文地址:https://www.cnblogs.com/csxcode/p/3737891.html