一,问题描述

给定一个整型数组(数组中的元素可重复),以及一个指定的值。打印出数组中两数之和为指定值的 所有整数对

二,算法分析

一共有两种方法来求解。方法一借助排序,方法二采用HashSet

方法一:

先将整型数组排序,排序之后定义两个指针left和right。left指向已排序数组中的第一个元素,right指向已排序数组中的最后一个元素

将 arr[left]+arr[right]与 给定的元素比较,若前者大,right--;若前者小,left++;若相等,则找到了一对整数之和为指定值的元素。

此方法采用了排序,排序的时间复杂度为O(NlogN),排序之后扫描整个数组求和比较的时间复杂度为O(N)。故总的时间复杂度为O(NlogN)。空间复杂度为O(1)

方法二:

依次遍历整型数组,对整型数组中的每一个元素,求解它的suplement(expectedSum-arr[i]).suplement就是指定的值减去该数组元素。

如果该元素的 suplement不在HashSet中,则将该元素添加到HashSet。

如果该元素的suplement在HashSet中,说明已经找到了一对整数之和为指定值的元素。

该方法使用了HashSet,故空间复杂度为O(N),由于只需要扫描一遍整型数组,故时间复杂度为O(N)

三,完整代码实现:

import java.util.Arrays;
import java.util.HashSet;public class ExpectSumOfTwoNumber {public static void expectSum_bySort(int[] arr, int expectSum){if(arr == null || arr.length == 0)return;Arrays.sort(arr);int left = 0, right = arr.length - 1;while(left < right){if(arr[left] + arr[right] > expectSum)right--;else if(arr[left] + arr[right] < expectSum)left++;else//equal
            {System.out.println(arr[left] + " + " + arr[right] + " = " + expectSum); left++;right--;}}}public static void expectSum_bySet(int[] arr, int expectSum){if(arr == null || arr.length == 0)return;HashSet<Integer> intSets = new HashSet<Integer>(arr.length);int suplement;for (int i : arr){suplement = expectSum - i;if(!intSets.contains(suplement)){intSets.add(i);}else{System.out.println(i + " + " + suplement + " = " + expectSum);}}}//hapjin testpublic static void main(String[] args) {int[] arr = {2,7,4,9,3};int expectSum = 11;expectSum_bySet(arr, expectSum);System.out.println("************");expectSum_bySort(arr, expectSum);System.out.println("----------------");int[] arr2 = {3,7,9,1,2,8,5,6,10,5};int expectSum2 = 10;expectSum_bySet(arr2, expectSum2);System.out.println("**********");expectSum_bySort(arr2, expectSum2);}
}

原文:http://www.cnblogs.com/hapjin/p/5746659.html

转载于:https://www.cnblogs.com/hapjin/p/5746659.html

找出数组中两数之和为指定值的所有整数对相关推荐

  1. 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)

    1.8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下 ...

  2. 找出数组中两个只出现了一次的数

    原题:给一组数,只有两个数只出现了一次,其他所有数都是成对出现的.怎么找出这两个数. 编写函数实现. 对于一组数中只有一个数只出现一次,其他所有数都是成对出现的,我们采用了对全部数组元素进行异或,经过 ...

  3. 数组中两数相加等于特定值,以字符串的形式输出两数角标

    2019独角兽企业重金招聘Python工程师标准>>> import java.util.*;/*输入util包内所有类*/ /* * 目标:给定一个整数数组和一个目标值, * 找出 ...

  4. 找出数组中两个只出现一次的数字

    题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 通过这道题感觉位运算很强大~这道题利用异或的几个性质:任何数与其本身异或值都为0,异或运算满足交换律. ...

  5. 【算法14】找出数组中两个只出现一次的数字

    [题 目]一个整型数组中除了两个数字外,其他的数字都出现两次.请找出这两个只在数组中出现一次的数字.要求时间复杂度O(n),空间复杂度O(1). [思 路]首先我们考虑一个稍微简单点的情况:如果这个数 ...

  6. 求给定数组中两数和为给定值的数量

    2019独角兽企业重金招聘Python工程师标准>>> 比如 给定值:3, 给定数组:5.1.3 .2.2. 1+2=3 and 2+1=3,返回2 private int find ...

  7. c语言实现在数组中找一个数字显示,C语言找出数组中的特定元素的算法解析

    问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现. 思路:如果能用两个辅助数组,那么相对 ...

  8. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  9. 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)

    数组中重复的数: 题目:找出数组中重复的数, 题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的. 也不知道每个数字重复几次.请找 ...

最新文章

  1. 如何让一个类可以被foreach枚举?
  2. 在Castle中使用nhibernate
  3. python图形界面实践_数据可视化之实践篇——python
  4. Node+Express+Vue2.x+Mongodb结合muse-ui、less、rem等实现简易博客
  5. 从javaagent迁移到JVMTI:我们的经验
  6. 2008年度一个下岗程序员的真实经历
  7. 自动驾驶感知系统(图)侵删
  8. [置顶] Embedded Server:像写main函数一样写Web Server
  9. linux服务器打印400错误,Nginx过一段时间出现400 Bad Request 错误解决方法
  10. [AI] 如何制作一个低配山寨版贾维斯?-口语人机交互 Spoken Human Robot Interaction
  11. 拳皇重生服务器维护,《拳皇97 OL》3月8日更新维护公告
  12. 217小白最新详细linux环境下安装博客WordPress教程
  13. django mysql sql语句_Django笔记:连接数据库并执行SQL语句
  14. 项目无法启动,Disconnected from the target VM
  15. 中国古代四大名著电子书(android)
  16. 微信小程序canva生成图片,长按图片识别小程序二维码详解
  17. 新初三暑假的记录和总结
  18. 拦截器实现网页用户登陆
  19. 索爱W550C的刷机过程
  20. c语言qsort函数的应用

热门文章

  1. 扫地机自动回充揭秘之科沃斯T8
  2. python地图图表和3d_Python地图可视化三大秘密武器
  3. 目标检测综述——单阶段检测器
  4. 基于评论、新闻的情感倾向分析作商品的价格预测
  5. troublemaker中文谐音_求Arashi 岚的Troublemaker的中文谐音~~~~ 超感激~
  6. pytorch之expand和repeat
  7. 手机不小心把计算机隐藏了怎么恢复,任务栏被隐藏如何恢复?
  8. excel删除重复数据保留一条_Excel怎么快速查找和删除重复数据
  9. 用 Doc2Vec 得到文档/段落/句子的向量表达
  10. glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解