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
java实现和为定值的两个数的更多相关文章
- 编程之法section II: 2.2 和为定值的两个数
====数组篇==== 2.2 求和为定值的两个数: 题目描述:有n个整数,找出其中满足两数相加为target的两个数(如果有多组满足,只需要找出其中一组),要求时间复杂度尽可能低. 解法一: 思路: ...
- 【Data Structure & Algorithm】在排序数组中查找和为定值的两个数
在排序数组中查找和为定值的两个数 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字,要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出 ...
- 算法笔记_037:寻找和为定值的两个数(Java)
目录 1 问题描述 2 解决方案 2.1 排序夹逼法 1 问题描述 输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数.如果有多对数的和等于输入的整数,输出任意一对即 ...
- Java数据结构与算法之---求两个数的最大公约数(欧几里得算法)
一个简单的小算法来获取两个数的最大公约数, public class Test { public static void main(String[] args) { long result = gcd ...
- 【剑指offer】和为定值的两个数
转载请注明出处:http://blog.csdn.net/ns_code/article/details/24933341 题目描写叙述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的 ...
- 【剑指offer学习】求和为定值的两个数(拓展)
接着上面一篇文章: http://blog.csdn.net/u013476464/article/details/40651451 接下来我们拓展一下题目,如果数组是乱序的,并且规定数组中的元素所有 ...
- Java实现 LeetCode 421 数组中两个数的最大异或值
421. 数组中两个数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, - , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算 ...
- (1)Two Sum--求数组中相加为指定值的两个数
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 在数组中寻找和为定值的n个数
/*-------------------------------------------------------*/ /*寻找和为定值的两个数 输入一个数组A[0,N-1]和一个数字Sum,在数组中 ...
随机推荐
- [CodeForces 300D Painting Square]DP
http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...
- CODING 敏捷实战系列课第三讲:可视化业务分析
业务分析处在开发过程的上游,提高业务分析的质量,可以减少后续开发.测试和集成过程中的反复确认,场景遗漏.采用可视化的业务分析工具箱可以大幅度避免文字版的业务需求描述所带来的不够完整,有误解等问题.CO ...
- Jmeter自动发送邮件
自动发送邮件: 1.自动发送邮件,需要三个jar,分别是:activation.jar,commons-email-1.2.jar,mail.jar,这三个文件放在ant的lib目录下 2.报错 Ex ...
- 如何发布自己用python写的py模块
Python——怎么发布你的Python模块 我们在学习Python的时候,除了用pip安装一些模块之外,有时候会从网站下载安装包下来安装,我也想要把我自己编写的模块做成这样的安装包,该怎么办,如何发 ...
- 相机测试camera报告的问题
AE问题 整体偏亮 整体偏暗 高光过爆 暗处过暗 对比度低/高 亮度: 关注暗处过暗 高光过爆 对比度: 关注头发,衣服 对比度低照片会有好像一层薄薄的,发蒙 关注植物,会有灰色的 AWB问题 偏 ...
- jQuery中效果animate方法解决width是百分比出现的问题
jQuery中效果animate方法解决width是百分比出现的问题 http://www.mafutian.net/131.html 问题描述: 效果如图,初始化,每个层宽20%,采用animate ...
- shiro的ssm集成和简单的开发尝试
配置web.xml <!-- 配置shiro的集成开始 --> <filter> <filter-name>shiroFilter</filter-name& ...
- vue npm run dev报错webpack-dev-server
在运行vue项目时报如下问题: E:\mobile_real\mobile-vue>npm run dev > mobile_real@1.0.0 dev E:\mobile_real\m ...
- indetityserver4-implicit-grant-types-请求流程叙述-上篇
说明:使用项目代码是这个,做了一点体力活:将 implicit grant types(简化授权类型)的页面跳转流程抓了个包. QuickstartIdentityServer 项目的发布地址:127 ...
- C#中方法的静态和非静态
在代码中,给方法加上static就成为了一个静态的方法,然而静态方法是隶属于类的,由类名点出来! 不给方法加static就是一个非静态方法,非静态的方法,是隶属于对象的,需要把类实例化之后,用对象名去 ...