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

来源:互联网 发布:手淘网络 编辑:程序博客网 时间:2024/06/07 08:49
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为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;}

0 0
原创粉丝点击