✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java
add and find.add - Add the number to an internal data structure.find - Find if there exists any pair of numbers which sum is equal to the value.
For example,
add(1); add(3); add(5);
find(4) -> true
find(7) -> false
设计一个two sum 的类。包含add和find两种操作方式。
1、使用HashMap和HashSet实现。
public class TwoSum {
    Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    Set<Integer> set = new HashSet<Integer>();
    // Add the number to an internal data structure.
    public void add(int number) {
        if (set.contains(number)){
            map.put(number, 2);
        }else {
            set.add(number);
            map.put(number, 1);
        }
    }
    // Find if there exists any pair of numbers which sum is equal to the value.
    public boolean find(int value) {
        for (int num : set){
            if (num == value - num){
                if (map.get(num) == 2){
                    return true;
                }
            } else if (set.contains(value - num)){
                return true;
            }
        }
        return false;
    }
}
// Your TwoSum object will be instantiated and called as such:
// TwoSum twoSum = new TwoSum();
// twoSum.add(number);
// twoSum.find(value);
2、使用HashMap 和 List(也可以只使用一个HashMap,记录一或者2即可。)
public class TwoSum {
    private List<Integer> list = new ArrayList<Integer>();
    private Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    // Add the number to an internal data structure.
    public void add(int number) {
        if (map.containsKey(number)) map.put(number, map.get(number) + 1);
        else {
            map.put(number, 1);
            list.add(number);
        }
    }
    // Find if there exists any pair of numbers which sum is equal to the value.
    public boolean find(int value) {
        for (int i = 0; i < list.size(); i++){
            int num1 = list.get(i), num2 = value - num1;
            if ((num1 == num2 && map.get(num1) > 1) || (num1 != num2 && map.containsKey(num2))) return true;
        }
        return false;
    }
}
// Your TwoSum object will be instantiated and called as such:
// TwoSum twoSum = new TwoSum();
// twoSum.add(number);
// twoSum.find(value);
3、为什么要使用一个List,因为在遍历操作的时候,List要比Map或者Set快得多,使用一个List可以用空间换取时间。
✡ leetcode 170. Two Sum III - Data structure design 设计two sum模式 --------- java的更多相关文章
- 170. Two Sum III - Data structure design【easy】
		
170. Two Sum III - Data structure design[easy] Design and implement a TwoSum class. It should suppor ...
 - LeetCode 170. Two Sum III - Data structure design (两数之和之三 - 数据结构设计)$
		
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
 - 【LeetCode】170. Two Sum III – Data structure design
		
Difficulty:easy More:[目录]LeetCode Java实现 Description Design and implement a TwoSum class. It should ...
 - [LeetCode] 170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计
		
Design and implement a TwoSum class. It should support the following operations:add and find. add - ...
 - leetcode[170]Two Sum III - Data structure design
		
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
 - [leetcode]170. Two Sum III - Data structure design两数之和III - 数据结构设计
		
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
 - 【leetcode】170. Two Sum III - Data structure design 两数之和之三 - 数据结构设计
		
Design and implement a TwoSum class. It should support the following operations: add and find. add ...
 - 【LeetCode】170. Two Sum III - Data structure design 解题报告(C++)
		
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数组+字典 平衡查找树+双指针 日期 题目地址:htt ...
 - [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计
		
Design and implement a TwoSum class. It should support the following operations:add and find. add - ...
 
随机推荐
- CSipSimple通话记录分组
			
为了便于查看通话记录,通常要对通话记录进行分组.本质上来说这没什么难度,只需要用ContentResolver去读数据库,剩下的就是策略问题.代码在com/csipsimple/ui/calllog/ ...
 - delphi Syntax check、 build、  run、 compile的区别
			
delphi Syntax check. build. run. compile的区别 Build是从新编译所有和生成exe有关的文件,无论.pas文件是否修改过,它都会重新生成新的.dcu,并从新 ...
 - HTML中的select只读
			
因为Select下拉框只支持disabled属性,不支持readOnly属性,而在提交时,disabled的控件,又是不提交值的.现提供以下几种解决方案: 1.在html中使用以下代码,在select ...
 - spring入门教程——笔记
			
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
 - STM32 HAL固件库编程的文件构架
			
对于我这种以前只接触过51和AVR单片机编程的小菜来说,现在开始学习STM32的编程,对于函数的功能以及C语言的语法都还好理解,难的是它提供的那一套硬件抽象层(HAL)驱动是怎么和其他的东东搭配在一起 ...
 - 操作系统和程序设计语言的API使用的字符编码分析
			
1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...
 - 转载--提高C++性能的编程技术
			
读书笔记:提高C++性能的编程技术 第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...
 - Pycharm中使用GitHub
			
Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...
 - GSM Hacking Part② :使用SDR捕获GSM网络数据并解密
			
0×00 在文章第一部分 GSM Hacking Part① :使用SDR扫描嗅探GSM网络 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密 ...
 - Eclipse Java class修改后的即时编译
			
通常情况下,修改了java文件,需要重启eclipse.但是myeclipse可以不用. 其实即时编译早就有了,通过简单配置javaRebel配置,可以达到修改java文件后不重启eclipse. 注 ...