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

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 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在零停机的情况下迁移 Kubernetes 集群

简介&#xff1a;本文将通过集群迁移的需求、场景以及实践方式&#xff0c;介绍如何基于阿里云容器服务 ACK&#xff0c;在零停机的情况下迁移 Kubernetes 集群。 作者&#xff1a;顾静&#xff08;子白&#xff09;&#xff5c;阿里云高级研发工程师&#xff1b;谢瑶瑶&#…

轻松理解 Docker 网络虚拟化基础之 veth 设备!

作者 | 张彦飞allen来源 | 开发内功修炼最近我又对网络虚拟化技术产生了浓厚的兴趣&#xff0c;迫切想搞明白在 Docker 等虚拟技术下&#xff0c;网络底层是如何运行的。不得不说&#xff0c;网络虚拟化技术是我给自己抛的又一个大坑。虽然我自认为把原生 Linux 网络实现过程理…

如何做好数字化体验管理,了解一下?

简介&#xff1a;本文主要分为三部分&#xff0c;第一部分是数字化体验的必要性&#xff0c;从数字化体验管理对业务的影响和数字化体验管理对企业的价值两个方面来介绍其必要性&#xff1b;第二部分&#xff0c;ARMS 在数字化体验管理上的产品能力介绍&#xff1b;第三部分&am…

java 中negate()_Java BigInteger negate()用法及代码示例

先决条件&#xff1a;BigInteger基础的java.math.BigInteger.negate()方法返回一个BigInteger&#xff0c;其值为(-this)。 negate()方法将更改BigInteger的单个位。用法:public BigInteger negate()参数&#xff1a;该方法不接受任何参数。返回值&#xff1a;该方法返回(-this…

深信服智能边缘计算平台与 OpenYurt 落地方案探索与实践

简介&#xff1a;本文将介绍边缘计算落地的机遇与挑战&#xff0c;以及边缘容器开源项目 OpenYurt 在企业生产环境下的实践方案。 作者&#xff1a;赵震&#xff0c;深信服云计算开发工程师&#xff0c;OpenYurt 社区 Member 编者案&#xff1a;在 5G、物联网等新技术的持续推…

云原生的本手、妙手和俗手

作者 | 步尔斯特来源 | 步尔斯特刚刚看到一个话题&#xff1a;Java大军&#xff0c;真的开始把目光从Spring Cloud转向云原生系的k8s Istio了么&#xff1f;乍一看&#xff0c;有一丝不解&#xff0c;Java大军&#xff1f;Spring Cloud&#xff1f;Kubernetes&#xff1f;Serv…

云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇

简介&#xff1a;生产环境的突袭演练是我们迈出的艰难但有力的一步&#xff0c;锻炼了研发运维人员的应急响应能力&#xff0c;在真实用户场景下锤炼系统&#xff0c;推进了产品的轮班制度&#xff0c;提升了云原生底座的稳定性和竞争力。 作者&#xff1a;智妍&#xff08;郑…

一般二叉树的顺序存储Java_100-顺序存储二叉树思路图解

2.网上数据结构和算法的课程不少&#xff0c;但存在两个问题&#xff1a;1)授课方式单一&#xff0c;大多是照着代码念一遍&#xff0c;数据结构和算法本身就比较难理解&#xff0c;对基础好的学员来说&#xff0c;还好一点&#xff0c;对基础不好的学生来说&#xff0c;基本上…

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

简介&#xff1a;本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性&#xff0c;我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。 作者&#xff1a;西流 导读&#xff1a;Spring Boot 是基于 Java Spring 框架的套件&#xff0c;它…

押宝云原生,Ampere Computing打响服务器芯片变革关键一枪

“闯龙潭&#xff0c;越虎穴”这句话用来形容在服务器领域披荆斩棘的Arm架构服务器器芯片似乎最为合适不过。所谓“龙潭”“虎穴”指的便是雄霸服务器芯片市场数载的intel与AMD&#xff0c;而他们所属的x86架构&#xff0c;更是数据中心芯片领域的绝对主流。然而云原生时代的到…

java方法能不能继承方法_关于java:方法链接+继承不能很好地一起玩吗?

这个问题是在C环境中提出的&#xff0c;但我对Java很好奇。对虚拟方法的关注并不适用(我认为)&#xff0c;但是如果您遇到这种情况&#xff1a;abstract class Pet{private String name;public Pet setName(String name) { this.name name; return this; }}class Cat extends …

阿里云实时数仓Hologres年度发布,解读数仓新趋势

简介&#xff1a;阿里云实时数仓Hologres年度发布&#xff0c;解读数仓新趋势。 1月7日&#xff0c;阿里云实时数仓Hologres发布最新版本&#xff0c;在成本、可用性、在线高可用等多方面进行了能力升级&#xff0c;行存吞吐提升100%&#xff0c;列存吞吐提升30%&#xff0c;支…

服务发现与配置管理高可用实践

简介&#xff1a;本篇是微服务高可用最佳实践系列分享的开篇&#xff0c;系列内容持续更新中&#xff0c;期待大家的关注。 作者&#xff1a;三辰&#xff5c;阿里云云原生微服务基础架构团队技术专家&#xff0c;负责 MSE 引擎高可用架构 本篇是微服务高可用最佳实践系列分享…

联想首次详解混合云Lenovo xCloud五大优势,如何打造智能化数字底座

多年积累之后&#xff0c;联想混合云品牌Lenovo xCloud主打云原生、智能运维、私有云、多云管理4大产品家族&#xff0c;9款通用解决方案&#xff0c;覆盖客户“建云、上云、用云和管云”的全部场景 6月10日&#xff0c;联想举办“弹性韧性悟性——多云混合时代Lenovo xCloud提…

阿里云何川:开放兼容的云,计算巢帮助合作伙伴云化升级

简介&#xff1a;保障业务稳定性&#xff0c;提供安全的云上互联网&#xff0c;助力合作伙伴实现规模化&#xff0c;打通多渠道分发。 12月21日&#xff0c;在阿里云弹性计算年度峰会上&#xff0c;阿里云弹性计算高级产品专家何川发表了题为《开放兼容的云&#xff0c;计算巢…

只用两个自定义 Hooks 就能替代 React-Redux ?

作者 | &#x1f47d;来源 | 前端Sharing前言之前有朋友问我&#xff0c;React Hooks 能否解决 React 项目状态管理的问题。这个问题让我思索了很久&#xff0c;最后得出的结论是&#xff1a;能&#xff0c;不过需要两个自定义 hooks 去实现。那么具体如何实现的呢&#xff1f;…

java queue源码_Java高并发系列之ArrayBlockingQueue源码解析

JUC包下定义了一个接口&#xff1a;BlockingQueue。其实现类有ArrayBlockingQueue等。本文先来介绍一下ArrayBlockingQueue。从字面可以看出&#xff0c;ArrayBlockingQueue是一种基于数组的阻塞队列&#xff0c;阻塞队列在线程池中会经常使用到。首先来看看ArrayBlockingQueue…

圆桌对话:云时代下,企业运维面临的挑战与机遇

简介&#xff1a;四位企业运维大咖展开对话&#xff0c;讨论“云时代下&#xff0c;企业运维面临的挑战与机遇”。 编者按&#xff1a;上云&#xff0c;已经成为了企业势不可挡的选择。云计算所拥有的“软件定义一切”的特性&#xff0c;推动了敏捷弹性、DevOps、智能运维和基…

揭晓阿里云神龙团队拿下TPCx-BB排名第一的背后技术

简介&#xff1a;近日&#xff0c;TPC Benchmark Express-BigBench(简称TPCx-BB)公布了最新的世界排名&#xff0c;阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000排名第一的成绩。TPCx-BB测试分为性能与性价比两个维度。其中&#xff0c;在性能维度&#xff0c;在本…

聊聊分布式一致性算法协议 Paxos

作者 | 码哥字节来源 | 码哥字节Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过&#xff1a;所有一致性协议本质上要么是Paxos要么是其变体。网上有很多讲解Paxos算法的文章&#xff0c;但是质量层次不齐。今天笔者带大家深入聊一下PaxosPaxos是什么&#xff1f;Paxos…