LeetCode219. 存在重复元素 II

 

思路:查找表 + 滑动窗口(窗口大小固定)

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        /**
         * 方法1:哈希
         */
        /*
        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); // hashMap中存入数字及其在数组中最后出现的索引
        }
        return false;
        */
        /**
         * 方法2:查找表 + 滑动窗口
         *      [l, l+k] 窗口一共有 k + 1个元素
         */
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) { 
            if (set.contains(nums[i])) return true;
            set.add(nums[i]);
            if (set.size() == k + 1) { // 保持set中最多有 k 个元素
                set.remove(nums[i - k]);
            }
        }
        return false;
    }
}

 

posted @ 2020-12-12 17:50  不学无墅_NKer  阅读(44)  评论(0编辑  收藏  举报