您的位置:首页 > 其它

如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)

2015-10-17 22:57 381 查看
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为O(1).
#include<iostream>
using namespace std;
bool find(int data[], int length, int num, int &num1, int &num2){
int head = 0;
int tail = length - 1;
while (head != tail){
int temp= data[head] + data[tail];
if (temp == num)
{
num1 = data[head];
num2= data[tail];
return true; }
if (temp<num) head++;
else tail--;
}
return false;
}
int main(void){
int data[] = { 1, 2, 4, 7, 11, 15 };
int a = 0, b = 0;
if (find(data, 6, 15,a,b)){
cout<<a<<" "<<b<< endl;
}
else
cout<<"no numbers"<< endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: