【LeetCode】219.存在重复元素II

219.存在重复元素II

知识点:数组;双指针;

题目描述

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

示例
输入:nums = [1,2,3,1], k = 3 输出:true 输入:nums = [1,0,1,1], k = 1 输出:true 输入:nums = [1,2,3,1,2,3], k = 2 输出:false

解法一:哈希表

class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: hash_set = {} for i, num in enumerate(nums): if num in hash_set and i-hash_set[num] <= k: return True hash_set[num] = i return False

解法二:滑动窗口

因为要满足两个下标在k范围内,索性可以维持一个长度为k的滑动窗口,然后检查这个窗口内是否有重复的元素。所以直接用维持一个长度为k的集合set,然后不断把元素加到集合里,不断把元素移出集合;

class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: s = set() for i, num in enumerate(nums): if num in s: return True s.add(num) if len(s) > k: s.remove(nums[i-k]) return False

__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/16071799.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】219.存在重复元素II』
点击右上角即可分享
微信分享提示