如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为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图标