[LeetCode] Two Sum - Data structure design

Two Sum - 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.

Time Complexity
add O(K)
find O(N)
Space Complexity
O(N) hashmap

思路

Initialize a hashmap, number added is key, how many times this number is added as value
For add method, add number into hashmap.
For find method, there are two situations that satisfy the requirement. If the number in hashmap which is target - number is different from the number in hashset, then just check if the map contains target number - the number in hashset. If the number is the same, then we should make sure it is not the same number, so map.get(value - keyNum) >= 2.

代码

public class TwoSum {

Map map = new HashMap();
// Add the number to an internal data structure.
public void add(int number) {
    // Write your code here
    if(!map.containsKey(number)) map.put(number, 1);
    else map.put(number, map.get(number) + 1);
}

// Find if there exists any pair of numbers which sum is equal to the value.
public boolean find(int value) {
    // Write your code here
    //it can't be the same number
    for(Integer keyNum : map.keySet()){
        if(value - keyNum == keyNum && map.get(value - keyNum) >= 2) return true;
        if(value - keyNum != keyNum && map.containsKey(value - keyNum)) return true;
    }
    return false;
}

}

你可能感兴趣的:(leetcode,LintCode)