[算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
来源:互联网 发布:乌鲁木齐网站排名seo 编辑:程序博客网 时间:2024/05/21 22:50
问题描述:
设计一个类,包含如下两个成员函数:
Save(int input) 插入一个整数到一个整数集合里。
Test(int target) 检查是否存在两个数和为输入值。如果存在着两个数,则返回true,否则返回false
允许整数集合中存在相同值的元素分析:
与[算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)不同,这里需要算出的是存不存在这两个数,可以在上一篇的基础上修改一下数据结构,HashMap
理一理代码思路
(1). 写Save(int input)。这个就简单了,只需判断是否存在input为key,有就value+1,没有就value=1。代码如下:
public void Save(int input){ int count = 0; if (map.containsKey(input)) { count = map.get(input); } map.put(input, count + 1);}
(2). 检查是否存在两个数和为输入值。上面的分析已经讲得差不多,这里就直接贴代码。代码如下:
public boolean Test(int target){ Iterator<Integer> iterator = map.keySet().iterator(); while (iterator.hasNext()) { int one = iterator.next(); int two = target - one; System.out.println("one:"+one+" two:"+two); if (map.containsKey(two)) { // two<<1等价于two*2 if (!(target ==two<<1 && map.get(two) == 1)) { return true; } } }return false;}
整合代码最终如下
import java.util.HashMap;import java.util.Iterator;public class TwoNumOfSum3{ // key:数值,value:数值对应的个数 HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); /** * 插入一个整数到一个整数集合里 * @param input */ public void Save(int input) { int count = 0; if (map.containsKey(input)) { count = map.get(input); } map.put(input, count + 1); } /** * 检查是否存在两个数和为输入值 * @param target * @return 如果存在着两个数,则返回true,否则返回false */ public boolean Test(int target) { Iterator<Integer> iterator = map.keySet().iterator(); while (iterator.hasNext()) { int one = iterator.next(); int two = target - one; System.out.println("one:"+one+" two:"+two); if (map.containsKey(two)) { if (!(target ==two<<1 && map.get(two) == 1)) { return true; } } } return false; } /** * @param args */ public static void main(String[] args) { TwoNumOfSum3 t=new TwoNumOfSum3(); t.Save(5); t.Save(10); t.Save(4); t.Save(7); System.out.println(t.Test(12)); }}
1 0
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(1)
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- 给定一个无序整型数组,找出数组中未出现的最小整数
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 给定一个整形数组,是否能找出其中的两个数使其和为某个指定的值?
- 给定N个整数集合是否存在两个其和刚好为指定常数的元素
- [算法]给定一个整型数组,找出能相加起来等于一个特定目标数字的两个数。
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 给定一个整数数组,找到和为零的子数组。
- 【算法导论学习-005】整数集合S中是否存在两个数等于给定的一个整数
- 程序员面试金典——解题总结: 9.17中等难题 17.12设计一个算法,找出数组中两数之和为指定值的所有整数对。
- 【每天一道算法题】给定一个存放整数的数组,要求数组左边为奇数,右边为偶数
- 描述一个运行时间为Θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- [计算机网络]TCP与UDP
- The connection to adb is down, and a severe error has occured
- java写文本文件三种方式效率比较
- ajax 新闻实例和数组
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 关于VC、MFC和ACCESS的一些使用问题
- ConvnetJS源代码分析第三篇
- tslib在arm上的安装使用
- 数据库表空间利用率及得到表空间创建相关
- TCP的哪些事(上)
- Win7安装Oracle10g详解
- [JavaScript] 3.JS 语句
- 素数的判定