码迷,mamicode.com
首页 > 其他好文 > 详细

170. Two Sum III - Data structure design

时间:2016-09-27 09:08:18      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

我自己的想法

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)

方法三代码:

 1 import java.util.Map.Entry;
 2 
 3 public class TwoSum {
 4     Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 5 
 6     // Add the number to an internal data structure.
 7     public void add(int number) {
 8         map.put(number, map.containsKey(number)? map.get(number) + 1: 1);
 9     }
10 
11     // Find if there exists any pair of numbers which sum is equal to the value.
12     public boolean find(int value) {
13         for(Map.Entry<Integer, Integer> entry: map.entrySet()) {
14             int cur = entry.getKey();
15             int target = value - cur;
16             if((cur == target && entry.getValue() > 1) || (cur != target && map.containsKey(target))) {
17                 return true;
18             }
19         }
20         return false;
21     }
22 }

方法四代码:

 1 public class TwoSum {
 2     Set<Integer> num = new HashSet<Integer>();
 3     Set<Integer> sum = new HashSet<Integer>();
 4     
 5     // Add the number to an internal data structure.
 6     public void add(int number) {
 7         if(num.contains(number)) {
 8             sum.add(number + number);
 9         } else {
10             for(int each: num) {
11                 sum.add(each + number);
12             }
13             num.add(number);
14         }
15     }
16 
17     // Find if there exists any pair of numbers which sum is equal to the value.
18     public boolean find(int value) {
19         return sum.contains(value);
20     }
21 }

但是提交的时候LTE了,可能因为给的例子里面add太多了吧

 

170. Two Sum III - Data structure design

标签:

原文地址:http://www.cnblogs.com/warmland/p/5911404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!