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

相关推荐
chuxinweihui7 分钟前
C语言项⽬实践-贪吃蛇
c语言·开发语言·数据结构·学习·链表
7yewh12 分钟前
LeetCode 力扣 热题 100道(五)最长回文子串(C++)
c语言·开发语言·c++·mcu·算法·leetcode
小奕同学A42 分钟前
坚如磐石的安全堡垒
算法·安全·哈希算法
赔罪1 小时前
C 语言I/O 函数
c语言·开发语言·数据结构·学习·青少年编程
爱排球爱跳舞的赵小包2 小时前
北航软件算法C4--图部分
算法
qq_441996052 小时前
Redis 中的主要数据结构
数据结构·数据库·redis
夜泉_ly2 小时前
数据结构 -hash table
数据结构·哈希算法·散列表
Fms_Sa2 小时前
数据结构查找-哈希表(开发地址法+线性探测法)+(创建+查找+删除代码)+(C语言代码)
c语言·数据结构·散列表
IT古董2 小时前
【机器学习】机器学习中用到的高等数学知识-5. 函数空间和泛函分析 (Functional Analysis)
人工智能·算法·机器学习
析木不会编程2 小时前
【数据结构】【线性表】静态链表(附C语言源码)
c语言·数据结构·链表