博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速寻找满足条件的两个数
阅读量:5742 次
发布时间:2019-06-18

本文共 654 字,大约阅读时间需要 2 分钟。

hot3.png

快速寻找满足条件的两个数 博客分类: 算法
问题:快速找出一个数组中的两个数字,让这两个数字之和等于一个固定值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。
 
解法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--。这样只需要在排好的数组上遍历一次,就可以得到最后的结果。
 
资料整理自《编程之美》

转载于:https://my.oschina.net/xiaominmin/blog/1597307

你可能感兴趣的文章
SpringMVC学习指南【笔记6】JSTL标签、函数
查看>>
GPS轨迹数据集免费下载资源整理
查看>>
考研?还是直接找工作?
查看>>
ue4 蓝图物体怎么不跟着蓝图动_UE4部分蓝图
查看>>
联通4g满格但是网速慢_为什么手机4G信号明明是满格,网络却很慢,背后的真实原因?...
查看>>
bable怎么使用 eclipse_Java Web轻松学46 - Maven集成到Eclipse中
查看>>
机器人 知乎碧桂园_碧桂园机器人首降淮阳,助力城市文化旅游
查看>>
ae2020不支持的视频驱动程序_音视频PaaS平台基于Windows的抓屏技术
查看>>
图纸打印什么时候用蓝图_工程图纸为什么是蓝图?
查看>>
网页中竖的目录怎么改成横的_骨架隔墙怎么做?
查看>>
查看历史操作记录_git操作方法
查看>>
5怎么选国外节点_房子装修,床垫怎么选?这5家床垫值得买
查看>>
变成一列_Excel一列数据转多行多列,这4条函数公式可以学起来
查看>>
手机超广角拍摄软件_如何用超广角“看开一点”?OPPO官方教学,这些大片装下整个夏天...
查看>>
rip协议中周期性广播路由信息的报文_关于RIP的一点小笔记--华为
查看>>
python range(30)_python的range()函数
查看>>
windows python3 paramiko安装_Python3.3 Paramiko Windows安装错误
查看>>
ref获取元素 vue 删除子元素_vue 添加删除子元素
查看>>
mysql有回收站吗_mysql 回收站
查看>>
cd usr local mysql_不想每次都到: /usr/local/mysql/bin
查看>>