再探滑动窗口:【存在重复元素 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个高频元素
29 0
|
2月前
|
算法
算法思想总结:滑动窗口算法
算法思想总结:滑动窗口算法
|
4月前
基础数据结构leetcode滑动窗口专题
基础数据结构leetcode滑动窗口专题
15 0
|
9月前
滑动窗口(单调队列)
滑动窗口(单调队列)
28 0
|
11月前
[leetcode 324] 摆动排序 II 思维+排序
[leetcode 324] 摆动排序 II 思维+排序
53 0
|
11月前
|
算法 索引
滑动窗口编程题集合(leetcode)
滑动窗口编程题集合(leetcode)
|
12月前
|
算法 索引
从五道leetcode掌握滑动窗口
可以看出,滑动窗口实际就是双指针同向移动的一种。可以想象,左右指针连接形成所谓的窗口,随着左右指针同时在数组中向后移动,就相当于窗口向后滑动,由此称为滑动窗口。值得注意的是,在指针向后的过程中,左右指针移动速度可以不同,所以窗口大小实际是不固定的。
|
机器学习/深度学习 算法 JavaScript
日拱算法,滑动窗口的最大值
日拱算法,滑动窗口的最大值
|
JavaScript 前端开发 算法
日拱算法:两个数组的交集(I、II)
本篇带来两个数组的交集(I、II)之双指针解法~ 冲就完事了~
|
机器学习/深度学习 存储 资源调度
算法刷题第六天:滑动窗口
时间复杂度:O(n+m+∣Σ∣),其中 n 是字符串 s_1​的长度,m 是字符串 s_2的长度,Σ 是字符集,这道题中的字符集是小写字母,∣Σ∣=26。
69 0
算法刷题第六天:滑动窗口