这几天终于把点标完了,用海洋师兄的话就是,以后再也不想做人脸了~~太痛苦了,都快累闭眼了~~
隔了好几天了,中午无聊写了一题
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得他们的和正好是输入的那个数字。
要求时间复杂度O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1,2,4,7,11,15和数字15.由于4+11=15,因此输出4和11.
这题的解题思路也很简单,两个关键地方,升序数组,时间复杂度O(n),因为数组已经排好了序,我们从头尾开始遍历,当大于数的时候,后面-1位,当小于数的时候,前面+1位即可。很简单吧。
代码如下:
#include <iostream>
using namespace std;
void findNumber(int array[],int n ,int ans)
{
int *begin = array,*end = array+n-1;
int sum = *begin + *end;
while(sum!=ans && begin < end)
{
if (sum<ans)
{
++begin;
}
else
{
--end;
}
sum = *begin + *end;
}
if (sum == ans)
{
cout<<*begin<<" "<<*end<<endl;
}
else
{
cout<<"not found~"<<endl;
}
}
void main()
{
int array[6]={1,2,4,7,11,15};
findNumber(array,6,15);
system("pause");
}