【练习】输入一个已经按升序排序过的数组和一个数字sum,在数组中查找两个数,使得它们 的和正好是输入的那个数字sum,要求时间复杂度为O(n)

 1 /************************************************************************/
2 /* 输入一个已经按升序排序过的数组和一个数字sum,在数组中查找两个数,使得它们 的和正好是输入的那个数字sum,要求时间复杂度为O(n)
3
4 解题思路:设置头尾两个指针,从第一个元素和最后一个
5 元素相加,如果大于sum,则尾指针向前移1个元素,继续判断两个数的和;
6 如果小于sum,则头指针向后移1个元素,继续判断两个数的和*/
7 /************************************************************************/
8 #include <iostream>
9 using namespace std;
10
11 void FindNum(int* array,int length, int sum)
12 {
13 int *begin=&array[0];
14 int *end=&array[length-1];
15 while (begin<end)
16 {
17 if ((*begin+*end)>sum)
18 {
19 end--;
20 }
21 else if ((*begin+*end)<sum)
22 {
23 begin++;
24 }
25 else
26 {
27 cout<<*begin<<""<<*end<<endl;
28 return;
29 }
30 }
31 cout<<"cannot find"<<endl;
32
33
34
35
36
37 }
38
39 int main()
40 {
41 int array[]={1,2,4,7,11,15};
42 FindNum(array,6,11);
43 return 0;
44 }

 

posted @ 2011-11-02 11:21  refazy  阅读(1798)  评论(0编辑  收藏  举报