170. Two Sum III - Data structure design
2016-09-27 08:08
281 查看
我自己的想法
1. 建一个list。
1)每次add就用Binary search找到插入的位置,插入O(logn)
2) 每次find就two pointer。O(n)
2. 一个arr
1)每次add直接加 O(1)
2)find就先sort,再two pointer. O(nlogn)
3. 建一个map,存每个数出现的次数.如果add常发生但是find不常发生
1)add就直接加o(1)
2) find就遍历map,找有没有target-cur的值。O(n)
4. 建两个set。一个存有的数,一个存有的可能的sum。适用于find常发生,而add不常发生的情况
1)add的时候把遍历set把所有可能的sum加入。O(n)
注意的是,如果该数已经在set里面了,那么只需要在sum set里加入这个数本身*2,不需要再遍历num set,因为加入第一个相同的数的时候已经算过一遍了
2) find的时候直接从sum set里面拿。O(1)
方法三代码:
方法四代码:
但是提交的时候LTE了,可能因为给的例子里面add太多了吧
1. 建一个list。
1)每次add就用Binary search找到插入的位置,插入O(logn)
2) 每次find就two pointer。O(n)
2. 一个arr
1)每次add直接加 O(1)
2)find就先sort,再two pointer. O(nlogn)
3. 建一个map,存每个数出现的次数.如果add常发生但是find不常发生
1)add就直接加o(1)
2) find就遍历map,找有没有target-cur的值。O(n)
4. 建两个set。一个存有的数,一个存有的可能的sum。适用于find常发生,而add不常发生的情况
1)add的时候把遍历set把所有可能的sum加入。O(n)
注意的是,如果该数已经在set里面了,那么只需要在sum set里加入这个数本身*2,不需要再遍历num set,因为加入第一个相同的数的时候已经算过一遍了
2) find的时候直接从sum set里面拿。O(1)
方法三代码:
import java.util.Map.Entry; public class TwoSum { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // Add the number to an internal data structure. public void add(int number) { map.put(number, map.containsKey(number)? map.get(number) + 1: 1); } // Find if there exists any pair of numbers which sum is equal to the value. public boolean find(int value) { for(Map.Entry<Integer, Integer> entry: map.entrySet()) { int cur = entry.getKey(); int target = value - cur; if((cur == target && entry.getValue() > 1) || (cur != target && map.containsKey(target))) { return true; } } return false; } }
方法四代码:
public class TwoSum { Set<Integer> num = new HashSet<Integer>(); Set<Integer> sum = new HashSet<Integer>(); // Add the number to an internal data structure. public void add(int number) { if(num.contains(number)) { sum.add(number + number); } else { for(int each: num) { sum.add(each + number); } num.add(number); } } // Find if there exists any pair of numbers which sum is equal to the value. public boolean find(int value) { return sum.contains(value); } }
但是提交的时候LTE了,可能因为给的例子里面add太多了吧
相关文章推荐
- [LeetCode]Add and Search Word - Data structure design
- Leetcode: Add and Search Word - Data structure design
- LeetCode 211. Add and Search Word - Data structure design(单词检索)
- leetcode 211: Add and Search Word - Data Structure Design
- Two Sum III - Data structure design
- 20170602-leetcode-211-Add and Search Word - Data structure design
- LeetCode211. Add and Search Word - Data structure design
- 170. Two Sum III - Data structure design
- Add and Search Word - Data structure design 解答
- leetcode 170: Two Sum III - Data structure design
- 211.leetcode Add and Search Word - Data structure design(medium)[Trie树]
- 211 Add and Search Word - Data structure design
- LeetCode Add and Search Word - Data structure design
- Easy 170题 Two Sum III - Data structure design
- [LeetCode] Add and Search Word - Data structure design
- LeetCode Add and Search Word - Data structure design
- leetcode 211. Add and Search Word - Data structure design 字典树的简单应用
- Add and Search Word - Data structure design
- Two Sum - Data structure design
- Leetcode 211 Add and Search Word - Data structure design