https://leetcode.com/problems/two-sum-iii-data-structure-design/
Design and implement a TwoSum class. It should support the following operations: 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
这道题一开始我还想用arraylist或linkedlist来存数字,后来看别人的发现确实只需要一个hashmap就可以了哈。
这样存进去的数字只需要更新在hashmap中的次数,find的时候也只需要在hashmap中找就行了。
代码如下:
public class TwoSum {
private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
public void add(int number) {
if(map.containsKey(number)) map.put(number, map.get(number)+1);
else map.put(number, 1);
}
public boolean find(int value) {
for(Integer num : map.keySet()){
int target = value - num;
if(target == num){
if(map.get(num)>=2) return true;
}
else if(map.containsKey(target)) return true;
}
return false;
}
}