一道算法优化题,求有序数组是否存在两数之和等于第三个给定的数字
1.题:给出一个函数,判断在一个给定的有序数组中,是否存在两个数之和等于给定的第三个数。
这道题本身挺简单,但是如果直接使用嵌套两个 for 循环的方式去做的话,时间复杂度非常之高。
希望能有大牛给出一个简单的算法优化思路。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
经典的
two sum problem
,保存双指针,分别指向数组开头和末尾,假设数组非降序排列,分情况讨论:如果当前两个数的和等于给定值,成功。
如果当前两个数的和小于给定值,头指针右移。
如果当前两个数的和大于给定值,尾指针左移。
如果尾指针跑到了头指针左边则无解。
时间复杂度
O(N)
也有其他解法,还有
3 / 4 sum problem
,很容易搜到。参考:
http://stackoverflow.com/questions/11928091/linear-time-algorithm-for-2-sum
https://leetcode.com/problems/two-sum/
给一个具体实现吧: