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

相关推荐
codingandsleeping4 小时前
重读《你不知道的JavaScript》(上)- 作用域和闭包
前端·javascript
前端风云志6 小时前
TypeScript实用类型之Omit
javascript
烛阴6 小时前
Puppeteer入门指南:掌控浏览器,开启自动化新时代
前端·javascript
芝士加8 小时前
Playwright vs MidScene:自动化工具“双雄”谁更适合你?
前端·javascript
Carlos_sam9 小时前
OpenLayers:封装一个自定义罗盘控件
前端·javascript
前端南玖10 小时前
深入Vue3响应式:手写实现reactive与ref
前端·javascript·vue.js
Frank_zhou10 小时前
算法-链表实战【删除链表的倒数第 N 个结点】中等
数据结构
Yueyanc11 小时前
LobeHub桌面应用的IPC通信方案解析
前端·javascript
王中阳Go12 小时前
从超市收银到航空调度:贪心算法如何破解生活中的最优决策谜题?
java·后端·算法
麦当_12 小时前
基于 Shadcn 的可配置表单解决方案
前端·javascript·面试