由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为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;
}
如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)
最新推荐文章于 2022-07-11 10:48:17 发布