Leetcode - Two Sum III - Data structure design

《Leetcode - Two Sum III - Data structure design》

My code:

public class TwoSum {
    HashMap<Integer, Integer> tracker = new HashMap<Integer, Integer>();
    // Add the number to an internal data structure.
    public void add(int number) {
        if (tracker.containsKey(number)) {
            tracker.put(number, tracker.get(number) + 1);
        }
        else {
            tracker.put(number, 1);
        }
    }

    // Find if there exists any pair of numbers which sum is equal to the value.
    public boolean find(int value) {
        for (Integer curr : tracker.keySet()) {
            int target = value - curr;
            if (tracker.containsKey(target)) {
                if (target != curr)
                    return true;
                else {
                    if (tracker.get(curr) >= 2)
                        return true;
                }
            }
        }
        return false;
    }
}


// Your TwoSum object will be instantiated and called as such:
// TwoSum twoSum = new TwoSum();
// twoSum.add(number);
// twoSum.find(value);

看的答案。不错。
http://www.programcreek.com/2014/03/two-sum-iii-data-structure-design-java/

Anyway, Good luck, Richardo!

这道题目还是挺有意思的。
虽然我这次没做出来。
最后的AC解法和我的解法其实差不多。说下差距。

  1. 我为了让逻辑更加清楚,用了更多的嵌套的if else,因此TLE,而AC 的解法,就没有嵌套,更快。
  2. AC里面更好的解法是把unique的数字插在一个链表里面。重复出现的只用插入一次。这样做有两个好处。
    遍历链表的元素个数小于遍历哈希表的。
    其次,哈希表遍历的复杂度是 O(n) rather than O(k), k = number of key

而链表的复杂度是O(m), m <= k

所以加入链表后作为一个遍历的机制,更快。

reference:
https://discuss.leetcode.com/topic/32786/beats-100-java-code/8

Anyway, Good luck, Richardo! — 09/02/2016

    原文作者:Richardo92
    原文地址: https://www.jianshu.com/p/68742cde4424#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞