[LeetCode]Two Sum III - Data structure design
这道题我用O(n)存O(1)取的时候会超时,但是用O(1)存O(n)取就不会超时,个人觉得是因为测试代码中存比取要多得多。。
其实觉得最好的方法应该是O(logn)存取,用两个二分搜索,但是还没太想明白应该用什么数据结构能实现
public class TwoSum { private HashMap<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); } } // Find if there exists any pair of numbers which sum is equal to the value. public boolean find(int value) { for (int key : map.keySet()) { int target = value - key; if (map.containsKey(target)) { if (target != key) { return true; } else { if (map.get(key) > 1) { return true; } } } } return false; } } // Your TwoSum object will be instantiated and called as such: // TwoSum twoSum = new TwoSum(); // twoSum.add(number); // twoSum.find(value);