再探滑动窗口:【存在重复元素 II】

简介: 再探滑动窗口:【存在重复元素 II】

题目


给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。


解题思路


  • 维护一个哈希表,用来模拟滑动窗口,里面始终最多包含 k 个元素,滑动窗口的大小为k,当出现重复值时则说明在 k 距离内存在重复元素
  • 每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字,滑动窗口滑动
  • 时间复杂度:O(n)


代码实现

  public boolean containsNearbyDuplicate(int[] nums, int k) {
        HashSet<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) {
                set.remove(nums[i - k]);
            }
        }
        return false;
    }


相关文章
|
7月前
|
API
代码随想录 Day10 栈与队列 LeetCode T239 滑动窗口的最大值 T347 前K个高频元素
代码随想录 Day10 栈与队列 LeetCode T239 滑动窗口的最大值 T347 前K个高频元素
30 0
|
2天前
|
索引
LeetCode438题(无敌双指针——滑动窗口)
LeetCode438题(无敌双指针——滑动窗口)
|
2天前
|
算法
算法思想总结:滑动窗口算法
算法思想总结:滑动窗口算法
|
2天前
基础数据结构leetcode滑动窗口专题
基础数据结构leetcode滑动窗口专题
16 0
|
2天前
|
算法
滑动窗口-求数组的所有连续子数组【学习算法】
滑动窗口-求数组的所有连续子数组【学习算法】
27 0
|
9月前
滑动窗口(单调队列)
滑动窗口(单调队列)
29 0
|
9月前
|
算法 索引
【滑动窗口】算法实战
滑动窗口算法的原理和leetcode中的相关题目题解。
|
11月前
|
算法 索引
滑动窗口编程题集合(leetcode)
滑动窗口编程题集合(leetcode)
|
算法 索引
从五道leetcode掌握滑动窗口
可以看出,滑动窗口实际就是双指针同向移动的一种。可以想象,左右指针连接形成所谓的窗口,随着左右指针同时在数组中向后移动,就相当于窗口向后滑动,由此称为滑动窗口。值得注意的是,在指针向后的过程中,左右指针移动速度可以不同,所以窗口大小实际是不固定的。
|
机器学习/深度学习 算法 JavaScript
日拱算法,滑动窗口的最大值
日拱算法,滑动窗口的最大值