219J. Contains Duplicate II

https://leetcode.com/problems/contains-duplicate-ii/ 上一题是 217J 下一题是 220J

虽然217 是个垃圾题,但是这个题真的不错。 如果是 sliding window 的题,这个题作为练习真的很好。

方法 最佳

用一个Set当Sliding Window, 就是这个Set 只包含第 i - 1 和其后 k - 1个元素
然后看第 i 个 是不是在这个Set里面。如果在的话,就直接返回true, 反之就一直到末尾,
然后返回false.
class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Set<Integer> mySet = new HashSet<>();
        for(int i = 0; i < nums.length; i++){
            if(mySet.contains(nums[i])){
                return true;
            }
            mySet.add(nums[i]);
            if(mySet.size()>k){
                mySet.remove(nums[i - k]);
            }
        }
        return false;
    }
}

Last updated

Was this helpful?