第2章 数字之魅——快速寻找满足条件的两个数
快速寻找满足条件的两个数
问题描述
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在这样一组或以上符合要求的解。
分析与解法
【解法一】
代码如下:
1 package chapter2shuzizhimei.findtwonumber; 2 /** 3 * 快速寻找满足条件的两个数 4 * 【解法一】 5 * @author DELL 6 * 7 */ 8 public class FindTowNumber1 { 9 //定义一个二元组类 10 public static class Tuple{ 11 public double a; 12 public double b; 13 public Tuple(double a, double b){ 14 this.a = a; 15 this.b = b; 16 } 17 } 18 //寻找满足条件的两个数 19 public static Tuple find(double a[],double sum){ 20 int n = a.length; 21 for(int i=0;i<n;i++){ 22 for(int j=i+1;j<n;j++){ 23 if(a[i]+a[j]==sum){ 24 Tuple t = new Tuple(a[i],a[j]); 25 return t; 26 } 27 } 28 } 29 return null; 30 } 31 public static void main(String[] args) { 32 double a[] = {3,8,4,9,12,5,1}; 33 double sum = 10; 34 Tuple t = find(a,sum); 35 System.out.println("数组中和为:"+sum+"的两个数为:"+t.a+" "+t.b); 36 37 } 38 39 }
程序运行结果如下:
数组中和为:10.0的两个数为:9.0 1.0
【解法二】
完整代码如下:
1 package chapter2shuzizhimei.findtwonumber; 2 /** 3 * 快速寻找满足条件的两个数 4 * 【解法二】 5 * @author DELL 6 * 7 */ 8 public class FindTowNumber2 { 9 //定义一个二元组类 10 public static class Tuple{ 11 public double a; 12 public double b; 13 public Tuple(double a, double b){ 14 this.a = a; 15 this.b = b; 16 } 17 } 18 19 //快速排序的一次划分 20 public static int partition(double a[], int first, int last) { 21 double temp = a[first]; 22 int i = first, j = last; 23 while (i < j) { 24 while (i < j && a[j] >= temp) { 25 j--; 26 } 27 if (i < j) 28 a[i] = a[j]; 29 while (i < j && a[i] <= temp) { 30 i++; 31 } 32 if (i < j) 33 a[j] = a[i]; 34 } 35 a[i] = temp; 36 return i; 37 } 38 39 // 快速排序 40 public static void quickSort(double a[], int first, int last) { 41 if (first >= last) 42 return; 43 int i = partition(a, first, last); 44 quickSort(a, first, i - 1); 45 quickSort(a, i + 1, last); 46 } 47 48 //寻找满足条件的两个数 49 public static Tuple find(double a[],double sum){ 50 int n = a.length; 51 quickSort(a,0,n-1); //从小到大排序 52 int i,j; 53 for(i=0,j=n-1;i<j;){ 54 if(a[i]+a[j]==sum){ 55 Tuple t = new Tuple(a[i],a[j]); 56 return t; 57 }else if(a[i]+a[j]>sum){ 58 j--; 59 }else{ 60 i++; 61 } 62 } 63 return null; 64 } 65 public static void main(String[] args) { 66 double a[] = {3,8,4,9,12,5,1}; 67 double sum = 9; 68 Tuple t = find(a,sum); 69 System.out.println("数组中和为:"+sum+"的两个数为:"+t.a+" "+t.b); 70 71 } 72 73 }
程序运行结果如下:
数组中和为:9.0的两个数为:1.0 8.0
转载于:https://www.cnblogs.com/gaopeng527/p/4626140.html
第2章 数字之魅——快速寻找满足条件的两个数相关推荐
- 编程之美2.12 快速寻找满足条件的两个数
这道题目的意思是,在一个数组中寻找两个数,使这两个数的和等于给定的数(找到任意一组就可以了). 题目读完之后,感觉这道题目还是很简单的,就是遍历数组呗,走两遍,即可以在O(n2)时间复 ...
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- 快速寻找满足条件的两个数
能否快速的在数组中找到两个数,让这两个数之和等于一个给定的数字. 解法1. 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为 给定的数字. 显然其时间复杂度为N(n-1)/2即O ...
- 程序员面试100题之十:快速寻找满足条件的两个数
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定S ...
- 【编程之美】2.12快速寻找满足条件的两个数
给一个数组,找出其中一对和为sum的数字. 由于已经做过排好序的数组,找和为sum的题目.所以完全没有过多考虑就排了序,左右指针相互收缩着寻找. 跟答案上的方法也是一样的. /* start time ...
- 编程之美-快速寻找满足条件的两个数方法整理
[问题描述] 方法一:时间复杂度O(n^2) 方法二:时间复杂度O(n),空间复杂度O(n) 方法三:时间复杂度O(nlogn)
- python同时满足两个条件_python算法-快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- 第2章 数字之魅——求二进制中1的个数
求二进制中1的个数 问题描述 对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高. [解法一] 可以举一个八位的二进制例子来进行分析.对于二 ...
- 寻找20以内某两个数相除,其结果离黄金分割点0.618最近
题目: 寻找某两个数相除,其结果 离黄金分割点 0.618最近: 要求:1)分母和分子不能同时为偶数 2)分母和分子 取值范围在[1-20] 分析:可采用嵌套for循环,分别遍历分子和分母,求出相除结 ...
最新文章
- 深入理解JavaScript类数组
- Linux ibm mq 教程,IBM MQ 使用指南
- SpringMVC处理自定义异常,通过读取配置文件把错误信息显示在前台页面
- react之bind函数到组件通识篇
- java 流 复制文件_【Java】使用字节流复制文件
- Spring mvc 注解@ResponseBody 返回内容编码问题
- MyEclipse 6.5安装maven插件
- 解决:There was an unexpected error (type=Internal Server Error,..). No instances available for XXX
- 去中心化抵押借贷市场当前总借款量94.24亿美元
- linux php adodb,【原创】Linux下php使用adodb对sql Server访问配置
- k-平均算法(k-means算法)(k均值算法)例题
- 2021瑞安高考成绩查询,2021年瑞安高考状元名单公布,瑞安文理科状元是谁多少分...
- flv转mp4视频格式转码教程
- Rqnoj341星门跳跃
- Molten 功能简介以及使用指南
- UWB DW1000 TWR测距定位功能实现
- .sh执行文件sed命令出错 bad flag in substitute command: ‘U‘ Mac终端
- LeetCode记录总结
- adguard拦截规则存在哪里_广告拦截软件Adguard怎样配置才能更全面的发挥作用
- Flutter 学习
热门文章
- *【HDU - 2819】Swap(二分图匹配,输出路径)(待证明:是否是最少交换次数?)
- 华为鸿蒙beta版发布会,华为HarmonyOS手机体验鸿蒙版微博:仅9.1MB 附华为鸿蒙发布会直播入口...
- php mysql int 日期格式化 string,MYSQL int类型字段的时间存放和显示 和 php的时间存放函数...
- java 前后的区别_java中前后++的区别
- rust 案例_RUST-X气相防锈产品落户中国,助力中国高端制造出口海外
- python os模块方法_python os模块方法总结
- Tomcat 6.0配置连建池的方式:
- postgresql兴建用户_PostgreSQL 12.2, 11.7, 10.12, 9.6.17, 9.5.21, 和 9.
- Linux 内存管理 | 物理内存、内存碎片、伙伴系统、SLAB分配器
- 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)