LeetCode Contains Duplicate I and II

January 2, 2021

Contains Duplicate

題目 217,檢查數組中是否有相同的值。思路一使用 Hash 方式,如果出現相同值 Hash 值會撞,如果撞表示是重複值。思路二使用 Set 不存放相同的值,最後比較 Set 存放的元素個數使否小於原始數組元素個數。

class Solution {
    public boolean containsDuplicate(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i=0; i<nums.length; i++){
            if (map.containsKey(nums[i])){
                return true;
            } else {
                map.put(nums[i], 1);
            }
        }
        return false;
    }
}
class Solution {
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> set = Arrays.stream(nums).boxed().collect(Collectors.toSet());
        return set.size() < nums.length;
    }
}

Contains Duplicate II

題目 219,相較於第一版則是多了一個條件,把出現重複的值其所在的元素位置進行相減,並且要小於或等於給定的 k。這邊延伸第一版的程式碼,只是多了位置的判別。

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i=0; i<nums.length; i++){
            if(map.containsKey(nums[i])){
                if ((i - map.get(nums[i])) <= k){
                    return true;
                }
            }
            map.put(nums[i], i);
        }
        return false;
    }
}