LeetCode 219 - 存在重复元素 II
题目描述
给你一个整数数组 nums 和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,满足:
- nums[i] == nums[j]
- abs(i - j) <= k
解题思路
1. 滑动窗口 + 集合
使用大小为 k 的滑动窗口和集合来解决:
- 维护一个最大长度为 k 的集合
- 遍历数组,对于每个元素:
- 如果当前元素在集合中已存在,返回 true
- 将当前元素加入集合
- 如果集合大小超过 k,移除最早加入的元素
2. 代码实现
1 | def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: |
相关题目:LeetCode 217 - 存在重复元素
给你一个整数数组 nums。如果任一值在数组中出现至少两次,返回 true;如果数组中每个元素互不相同,返回 false。
示例 1
输入:nums = [1,2,3,1]
输出:true
解释:元素 1 在下标 0 和 3 出现。
示例 2
输入:nums = [1,2,3,4]
输出:false
解释:所有元素都不同。
示例 3
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示
1 <= nums.length <= 10^5-10^9 <= nums[i] <= 10^9
1 | def containsDuplicate(self, nums: List[int]) -> bool: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Never Settle!
评论