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

相关推荐
yuanManGan8 分钟前
领略算法真谛:单源最短路问题
算法
steven~~~24 分钟前
elementui初学1
前端·javascript·elementui
轮到我狗叫了40 分钟前
力扣热题100,力扣148.排序链表力扣.26找出字符串中第一个匹配项的下标力扣146.LRU缓存序列管理器
算法·leetcode·职场和发展
2301_794461572 小时前
力扣-三数之和
数据结构·算法·leetcode
徐行tag5 小时前
深度学习基础——神经网络优化算法
深度学习·神经网络·算法
TE-茶叶蛋5 小时前
React的合成事件(SyntheticEventt)
前端·javascript·react.js
GISer_Jing7 小时前
CSS-in-JS:现代前端样式管理的革新
前端·javascript·css
liuzhangfeiabc7 小时前
[luogu12541] [APIO2025] Hack! - 交互 - 构造 - 数论 - BSGS
c++·算法·题解
咖啡の猫9 小时前
JavaScript基础-作用域链
开发语言·javascript
平和男人杨争争9 小时前
山东大学计算机图形学期末复习15——CG15
人工智能·算法·计算机视觉·图形渲染