快速寻找满足条件的两个数
能否快速的在数组中找到两个数,让这两个数之和等于一个给定的数字。
解法1、
一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为
给定的数字。
显然其时间复杂度为N(n-1)/2即O(N^2)。这个算法很简单,写起来也很容
易,但是效率不高。一般在程序设计里面,要尽可能降低算法的时间和空间复杂度,
所以需要继续寻找效率更高的解法。
vector<double> mindifference(double arr[], int n, int num)
{vector<double>result;for (int i = 0; i < n; i++){for (int j = i + 1; j < n; j++){if (arr[i] + arr[j] == num){result.push_back(arr[i]);result.push_back(arr[j]);break;}}}return result;
}
解法二
求两个数字之和,假设给定的和为Sum。一个变通的思路,就是对数组中的每个
数字arr[i]都判别Sum-arr[i]是否在数组中,这样,就变通成为一个查找的算法。
vector<double> mindifference(double arr[], int n, int num)
{int index;vector<double>result;for (int i = 0; i < n; i++){index = arr.find(num - arr[i]);if (index != NULL){result.push_back(arr[i]);result.push_back(arr[index]);break;}}return result;
}
解法三
还可以换个角度来考虑问题,假设已经有了这个数组的任意两个元素之和的有
序数组(长为N^2)。那么利用二分查找法,只需用O(2*log2N)就可以解决这个
问题。当然不太可能去计算这个有序数组,因为它需要O(N^2)的时间。但这个思
考仍启发我们,可以直接对两个数字的和进行一个有序的遍历,从而降低算法的时
间复杂度。
首先对数组进行排序,时间复杂度为(N*log2N)。
然后令i = 0,j = n-1,看arr[i] + arr[j] 是否等于Sum,如果是,则结束。如果小于
Sum,则i = i + 1;如果大于大于Sum,则 j = j – 1。这样只需要在排好序的数组上遍
历一次,就可以得到最后的结果 ,时间复杂度为O(N)。两步加起来总的时间复杂
度O(N*log2N),下面这个程序就利用了这个思想,代码如下所示:
for (i = 0,j=n-1; i < n; i++)
{if (arr[i] + arr[j] == num){return (i, j);}else{if (arr[i] + arr[j] < sum){i++;}else{j--;}}
}
快速寻找满足条件的两个数相关推荐
- 编程之美2.12 快速寻找满足条件的两个数
这道题目的意思是,在一个数组中寻找两个数,使这两个数的和等于给定的数(找到任意一组就可以了). 题目读完之后,感觉这道题目还是很简单的,就是遍历数组呗,走两遍,即可以在O(n2)时间复 ...
- 第2章 数字之魅——快速寻找满足条件的两个数
快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在这样一组或以上符合要求的解. 分析与解法 [解法一] ...
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- python同时满足两个条件_python算法-快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- 程序员面试100题之十:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定S ...
- 【编程之美】2.12快速寻找满足条件的两个数
给一个数组,找出其中一对和为sum的数字. 由于已经做过排好序的数组,找和为sum的题目.所以完全没有过多考虑就排了序,左右指针相互收缩着寻找. 跟答案上的方法也是一样的. /* start time ...
- 编程之美-快速寻找满足条件的两个数方法整理
[问题描述] 方法一:时间复杂度O(n^2) 方法二:时间复杂度O(n),空间复杂度O(n) 方法三:时间复杂度O(nlogn)
- 小小c#算法题 - 1 - 找出数组中满足条件的两个数
把一些东西放到网上,看的时候方便一些.代码可能有bug且不是最佳解决方案,仅供参考. 题目:输入一个按升序排序的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字. 要求时间复杂度是 ...
- 寻找20以内某两个数相除,其结果离黄金分割点0.618最近
题目: 寻找某两个数相除,其结果 离黄金分割点 0.618最近: 要求:1)分母和分子不能同时为偶数 2)分母和分子 取值范围在[1-20] 分析:可采用嵌套for循环,分别遍历分子和分母,求出相除结 ...
最新文章
- java-第十三章-类的无参方法(一)-实现客户姓名的添加和显示
- 697. Degree of an Array 频率最高元素的最小覆盖子数组
- 深度卷积神经网络CNNs的多GPU并行框架 及其在图像识别的应用
- python文件和目录操作方法
- 10 大方法,让您的客服中心提供更出色的服务
- Photoshop Blendmodi in GLSL
- 用定时器控制灯的闪烁梯形图_用西门子PLC设计灯的闪烁的梯形图,就只要梯形图。...
- PDF N-Up Maker:一个把PDF转成小册子或者把多个页面放到一个页面上的工具(免费,免Acrobat,命令行模式)...
- idea看更改过的代码_就是你把所有代码全写在一个类里的?
- 服务器设置浏览器是否缓存
- 数据分析 线性回归分析 方差分析表
- html5qq空间代码作业,免费QQ空间背景代码大全(高手整理)
- 如何编辑微信文章(微信文章导出word)
- TTT培训,关于培训师的培训
- iOS冰与火之歌 – Objective-C Pwn and iOS arm64 ROP
- 幼儿园教师计算机心得,幼儿园教师信息技术应用心得体会
- vmware最小化安装
- segment的理解
- 计算机组成原理与体系结构——层次化存储结构
- 微信小程序蓝牙ibeacon_微信小程序iBeacon测距及稳定程序的实现解析
热门文章
- PowerEdge R730安装Windows server2008 R2操作系统
- 【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
- 10.23 相对,绝对路径,cd,mkdir/rmdir,rm命令
- What every programmer should know about memory 笔记
- 京东自建数据中心核心技术解密——运营管理篇
- Android 为什么要有handler机制?handler机制的原理
- 网站微信登录授权 ASP.NET
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
- Mysql数据库常用操作整理
- Android 打开屏幕旋转