快速寻找满足条件的两个数
来源:互联网 发布:嵌入式linux开发pdf 编辑:程序博客网 时间:2024/05/06 22:22
问题:快速找出一个数组中的两个数字,让这两个数字之和等于一个固定值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
解法1:直接枚举,计算两两数字之和,时间复杂度为O(N2)。
解法2:找sum-arr[i]是否存在。
对于每个数字arr[i],查找应对的sum-arr[i]是否在数组中,那么关键就在于如何提高查找的效率。
为了提高查找效率,我们可以将数组排序,这需要O(N*log2N)的时间,使用二分查找等方法进行查找,需要O(log2N),总的时间复杂度是O(N*log2N)。
另外,还有更快的查找方法:Hash表。给定一个数字,根据hash映射查找另一个数字是否在数组中,只需用O(1)时间。但这种方法需要额外增加O(N)的hash表存储空间。总体的算法复杂度为O(N)。
解法3:当题目要求返回两个下标时,则比较高效的办法是:先排序,然后在一个循环体里使用两个循环变量进行反向遍历,并且这两个变量遍历的方向是不变的,从而保证遍历算法的时间复杂度为O(n)。
首先对数组进行排序,时间复杂度为O(N*log2N)。
令i=0,j=n-1,看arr[i]+arr[j]是否等于sum,如果是,则结束,如果小于sum,则i++,如果大于sum,则j--。这样只需要在排好的数组上遍历一次,就可以得到最后的结果。
资料整理自《编程之美》
0 0
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数
- 快速寻找满足条件的两个数或三个数
- 编程之美-快速寻找满足条件的两个数
- 编程之美--快速寻找满足条件的两个数
- 基于 Jenkins 快速搭建持续集成环境
- 大O记法
- Java反转单链表(code)
- 多线程之NSOperation
- 二分查找时间复杂度的计算
- 快速寻找满足条件的两个数
- 高德地图 key获取与Key错误解决方案
- UIStepper - 步进控件
- 动态加载js
- 非常强大的shell写的俄罗斯方块
- HttpClient 4.3.3 cookie rejected的解决办法
- 网络爬虫(网络蜘蛛)之网页抓取
- dubbo 分布式事务
- leetcode 206. Reverse Linked List