leetcode219. Contains Duplicate II

Given an integer array nums and an integer k, return true if there are two distinct indices i and j in the array such that nums[i] == nums[j] and abs(i - j) <= k.

Example 1:

Input: nums = [1,2,3,1], k = 3

Output: true

Example 2:

Input: nums = [1,0,1,1], k = 1

Output: true

Example 3:

Input: nums = [1,2,3,1,2,3], k = 2

Output: false

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

滑动窗口 + 哈希表

整理题意:是否存在长度不超过的 k+1 窗口,窗口内有相同元素。

我们可以从前往后遍历 nums,同时使用 Set 记录遍历当前滑窗内出现过的元素。

假设当前遍历的元素为 nums[i]:

复制代码
下标小于等于 k(起始滑窗长度还不足 k+1):直接往滑窗加数,即将当前元素加入 Set 中;
下标大于 k:将上一滑窗的左端点元素 nums[i−k−1] 移除,判断当前滑窗的右端点元素 nums[i] 是否存在 Set 中,若存在,返回 True,否则将当前元素 nums[i] 加入 Set 中。

重复上述过程,若整个 nums 处理完后仍未找到,返回 False。

class Solution:

def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:

n = len(nums)

s = set()

for i in range(n):

if i > k:

s.remove(nums[i - k - 1])

if nums[i] in s:

return True

s.add(nums[i])

return False

相关推荐
ulias2123 分钟前
各种背包问题简述
数据结构·c++·算法·动态规划
乖女子@@@10 分钟前
React笔记_组件之间进行数据传递
javascript·笔记·react.js
m0_5704664113 分钟前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌20 分钟前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站20 分钟前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
F2E_Zhangmo25 分钟前
基于cornerstone3D的dicom影像浏览器 第二章 加载本地文件夹中的dicom文件并归档
前端·javascript·css
念念不忘 必有回响31 分钟前
js设计模式-装饰器模式
javascript·设计模式·装饰器模式
ulias21234 分钟前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划
山河君35 分钟前
webrtc之语音活动上——VAD能量检测原理以及源码详解
算法·音视频·webrtc·信号处理
weixin_584121431 小时前
vue3+ts导出PDF
javascript·vue.js·pdf