如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为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; }
相关文章推荐
- 文章标题
- C语言创建一个数组,利用函数调用实现数组的初始化,逆置和清零
- C#不安全代码和stackalloc
- Linux 终端与控制台的区别
- JSONKit总结笔记
- Qt小软件:ShutdownHelper-关机小助手
- 最近学习感悟
- OpenGL的配置以及在MFC框架上的使用(附上源代码)
- Android中最佳常量定义方法
- 大道至简:软件工程实践者的思想——第三章感想
- android Gif播放
- Effective Unity3D
- 论奋斗
- blktrace 深度了解linux系统的IO运作
- 使用Servlet3.0提供的API实现文件上传
- 排序的分类
- 二、JavaScript语言--JS基础--JavaScript进阶篇--选项卡切换效果
- 树中两节点的最低公共祖先
- Android OpenGL ES(1)
- ASP.NET - 使用MqSql数据库