如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为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;
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: JSP详细解析
- 下一篇: 给网页标题加入logo图标
