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

本文介绍了一种在已排序数组中寻找两数使和等于指定值的方法,并实现了时间复杂度为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 }

 

转载于:https://www.cnblogs.com/caidaxia/archive/2011/11/02/2232802.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值