1 问题描述

输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数。如果有多对数的和等于输入的整数,输出任意一对即可。例如,如果输入数组[1,2,4,5,7,11,15]和整数15,那么由于4+11 = 15,因此输出4和11。

2 解决方案

2.1 排序夹逼法

首先将整数数组,使用合并排序进行从小打到的排序,然后对这个排完序的数组从两头往中间遍历,一旦出现两个数的和等于输入的那个整数,则立即输出这两个数,并结束遍历。

具体代码如下:

package com.liuzhen.array_2;

public class TwoSumN {

/*

* 参数A:给定的一个从小到大排序的数组

* 参数n:待求和数n

* 函数功能:打印出A中两个元素,满足A[i]+A[j] = n

*/

public void getTwoSumN(int[] A,int n){

int start = 0;

int end = A.length - 1;

while(start < end){

if(A[start] + A[end] == n){

System.out.println("\n数组中元素A["+start+"]" +

" + A["+end+"] = "+n+",A["+start+"] = "+A[start]+",A["+end+"] = "+A[end]);

break;

}

else{

if(A[start] + A[end] > n)

end--;

else

start++;

}

}

}

//归并排序

public void mergeSort(int[] A){

if(A.length > 1){

int[] leftA = getHalfArray(A,0); //数组A的左半部分

int[] rightA = getHalfArray(A,1); //数组A的右半部分

mergeSort(leftA);

mergeSort(rightA);

getMerge(A,leftA,rightA);

}

}

/*

* 参数A:要进行折半的数组

* 参数judge:judge == 0表示返回数组A左上半部分,judge != 0表示返回数组A的右半部分

* 函数功能:把数组按照长度均分为上半部分和下半部分

*/

public int[] getHalfArray(int[] A,int judge){

int[] result;

if(judge == 0){

result = new int[A.length/2];

for(int i = 0;i < A.length/2;i++)

result[i] = A[i];

}

else{

result = new int[A.length - A.length/2];

for(int i = 0;i < A.length - A.length/2;i++)

result[i] = A[i+A.length/2];

}

return result;

}

/*

*参数A:给定待排序数组

*参数leftA:数组A的左半部分

*参数rightA:数组的右半部分

*函数功能:返回数组A的从小到大排序

*/

public void getMerge(int[] A,int[] leftA,int[] rightA){

int i = 0; //用于计算当前遍历leftA的元素个数

int j = 0; //用于计算当前遍历rightA的元素个数

int count = 0; //用于计算当前得到按从小到大排序的A的元素个数

while(i < leftA.length && j < rightA.length){

if(leftA[i] < rightA[j]){

A[count++] = leftA[i];

i++;

}

else{

A[count++] = rightA[j];

j++;

}

}

if(i < leftA.length){

while(i < leftA.length)

A[count++] = leftA[i++];

}

if(j < rightA.length){

while(j < rightA.length)

A[count++] = rightA[j++];

}

}

public static void main(String[] args){

TwoSumN test = new TwoSumN();

int[] A = {2,1,7,4,6,1,2,4,3,6,8,4,2,1,7,3,4,6,8,3,4};

test.mergeSort(A);

System.out.println("对数组A进行合并排序后结果:");

for(int i = 0;i < A.length;i++)

System.out.print(A[i]+" ");

test.getTwoSumN(A, 10);

}

}

运行结果;

对数组A进行合并排序后结果:

1 1 1 2 2 2 3 3 3 4 4 4 4 4 6 6 6 7 7 8 8

数组中元素A[3] + A[20] = 10,A[3] = 2,A[20] = 8

算法笔记&lowbar;041&colon;寻找和为定值的多个数(Java)

目录 1 问题描述 2 解决方案 1 问题描述 输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题 ...

在数组中寻找和为定值的n个数

/*-------------------------------------------------------*/ /*寻找和为定值的两个数 输入一个数组A[0,N-1]和一个数字Sum,在数组中 ...

编程之法section II&colon; 2&period;2 和为定值的两个数

====数组篇==== 2.2 求和为定值的两个数: 题目描述:有n个整数,找出其中满足两数相加为target的两个数(如果有多组满足,只需要找出其中一组),要求时间复杂度尽可能低. 解法一: 思路: ...

【Data Structure &amp&semi; Algorithm】在排序数组中查找和为定值的两个数

在排序数组中查找和为定值的两个数 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字,要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出 ...

Java实现寻找和为定值的多个数

1 问题描述 输入两个整数n和sum,要求从数列1,2,3,-,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题是典型的背包问题的应用,即先找出n个数 ...

【剑指offer】和为定值的两个数

转载请注明出处:http://blog.csdn.net/ns_code/article/details/24933341 题目描写叙述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的 ...

【剑指offer学习】求和为定值的两个数(拓展)

接着上面一篇文章: http://blog.csdn.net/u013476464/article/details/40651451 接下来我们拓展一下题目,如果数组是乱序的,并且规定数组中的元素所有 ...

算法笔记&lowbar;035&colon;寻找最小的k个数(Java)

目录 1 问题描述 2 解决方案 2.1 全部排序法 2.2 部分排序法 2.3 用堆代替数组法 2.4线性选择算法   1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 ...

算法笔记&lowbar;031&colon;计算中值和选择问题(Java)

目录 1 问题描述  2 解决方案 2.1 计算中值问题 2.2 选择问题   1 问题描述 中值问题是求一个n个数列表中某一数组下标k,它要求该下标元素比列表中的一半元素大,又比另一半元素小,这个中 ...

随机推荐

ReactJS入门(四)—— 组件API

本篇将介绍 React 组件的API,其中主要的几个API我们在第一篇的时候便已介绍过,这里可以做个温故知新. 本篇的代码你也可以在我的Github上获取到. setState 参数: nextSta ...

深入理解Bootstrap笔记

框架介绍 1.框架简介 2.CSS基本语法 3.JavaScript基本语法 4.Bootstrap整体架构 5.12栅格系统 6.CSS组件架构设计思想 7.JavaScript插件架构 CSS布局 ...

iOS——Command-Line 查看当前SDK版本并修改默认SDK版本

在工作中可能会碰到用命令行编译.打包iOS应用程序的情况(xcodebuild相关命令). 但是由于SDK版本问题,会报错,说某SDK版本不对,可能是因为升级Xcode导致的SDK版本升级,为了避免高 ...

objective-c中字符串长度计算

我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...

Struts2 框架验证

struts2框架验证(xml方式):    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法        * 创建一个xml格式验证文 ...

STM32串口usart发送数据

主函数请直接关注41行到47行代码!! #include "stm32f10x.h" // 相当于51单片机中的 #include #include ...

新人入坑Redis必会的吐血总结

新人入坑Redis必会的吐血总结 一.什么是Redis Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map.简单来讲,Redis是一种NO ...

JDBC辅助类封装 及应用

一:代码图解: 二:配置文件: driverClassName=com.mysql.jdbc.Driver url=jdbc\:mysql\://127.0.0.1\:3306/xlzj_sh_new ...

Ubuntu18&period;10下运行blender2&period;80bate闪退&lpar;问题&quest;&rpar;

Ubuntu18.10下直接运行blender2.80bate闪退, 运行blender2.79正常. ================= root@tom-laptop:/# uname -aLin ...

禁用firefox 56自动更新

firefox 56支持旧式扩展,这很重要! 它却自动更新,简单地关了也不行,很是牛氓! ========== -备份C:\Users\用户名\AppData\Roaming\Mozilla\Fire ...

java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java)相关推荐

  1. c语言二分法查找一个数_算法竞赛小专题系列(1):二分法、三分法

    本系列是这本算法教材的扩展资料:<算法竞赛入门到进阶>. 罗勇军.郭卫斌. 清华大学出版社 二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 1. ...

  2. 请从1到35之间随机选择5个数,再从1到12中随机选择两个数,作为双色球的开奖号码...

    好的,我来随机选择双色球的开奖号码.根据您的要求,在1到35之间随机选择5个数,再从1到12中随机选择2个数,得到的开奖号码是:16, 5, 22, 31, 29,红球为8,蓝球为11.请注意,这只是 ...

  3. java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。

    展开全部 叶子节点:没有孩子节点的节点 也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把 ...

  4. 算法笔记_031:计算中值和选择问题(Java)

    目录 1 问题描述  2 解决方案 2.1 计算中值问题 2.2 选择问题   1 问题描述 中值问题是求一个n个数列表中某一数组下标k,它要求该下标元素比列表中的一半元素大,又比另一半元素小,这个中 ...

  5. mysql最小费用最大流问题_算法笔记_140:最小费用最大流问题(Java)

    packagecom.liuzhen.practice;importjava.util.ArrayList;importjava.util.Scanner;public classMain {publ ...

  6. 1亿以内素数的个数_算法|找出给定范围的所有素数

    本文参考C++版本:如何高效判定.筛选素数 给定n,我们如何输出n以内(不含n)的所有素数? 使用Python,完成函数体,要求返回n以内的素数个数和这些素数. def countPrimes(n): ...

  7. java中两短行代码合并一行_帮忙啊!!!!找出两个Java文件相似程度超过某一%的代码行。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 题目的要求是两个文件的行数相同是吗 百分比怎么算,根据字符来比较,以短的为准,计算两行代码拥有相同的字符数然后再除以短的那行代码的总字符数? 纯手打,可能 ...

  8. c语言找两个数中的最大值,不用任何比较判断找出两个数中的最大值

    题目: 给定两个32位整数a和b,返回a和b中较大的一个,要求不能使用比较判断 思路一 : 判断a-b的符号,sign(int n) 函数实现 n为正数返回1,n为负数返回0.return a*scA ...

  9. java删除有序数组中的重复元素_算法刷刷刷Leetcode第26题删除排序数组中的重复项...

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成.示例 ...

最新文章

  1. 人群分析--ResnetCrowd: A Residual Deep Learning Architecture
  2. 【Keras】基于SegNet和U-Net的遥感图像语义分割
  3. 原生app跳html页面传值,HTML页面跳转及参数传递问题
  4. 影响一生的职业建议 [转] - 看懂了不一定在高位,在高位的必须看懂了、信息量很大,多学学!...
  5. Shell脚本的学习笔记一:变量
  6. 19岁「天才少年」自制CPU!1200个晶体管,纯手工打造
  7. java创建临时文件_用Java创建一个临时文件
  8. python自动复制_Python自动复制日志,python,拷贝
  9. python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例
  10. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.1.1
  11. 计算机组成原理 最新教材,《计算机组成原理》东南大学教材.pdf
  12. php抽奖简单源码,php转盘抽奖 完整例子源码(含模拟数据)
  13. android投屏功能开发,Android PC投屏功能实现的示例代码
  14. java.lang.UnsatisfiedLinkError解决方法
  15. 上海图书馆及分馆特色
  16. 和阿里的测试总监聊过后,才知道为什么我的薪资一直在原地踏步!
  17. excel乘法公式怎么输入_智能考勤表,MM你再也不用加班了!【Excel教程】
  18. Android国外学习资源汇总
  19. 风险中性贴现-短期利率贴现
  20. web安全知识点(常见web攻击总结)

热门文章

  1. css文本行高是哪个属性_CSS中的line-height行高属性的使用技巧小结
  2. 《AI 3.0》作者梅拉妮·米歇尔:今天的机器距离真正像人一样理解世界还有多远...
  3. 延长天文学家寿命的发现——纳皮尔发现对数
  4. linux 打开上一级目录,linux开机启动过程、PATH、过滤一级目录、cd的参数、ls -lrt、命令切割日志...
  5. mysql大量数据合并_mysql中将多行数据合并成一行数据
  6. php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦
  7. java文件流操作注意
  8. 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
  9. VS调试启动编辑并继续功能
  10. 3类代码安全风险如何避免?