219. 存在重复元素 II
1. 题目
给你一个整数数组 nums
和一个整数 k
,判断数组中是否存在两个 不同的索引 i
和 j
,满足 nums[i] == nums[j]
且 abs(i - j) <= k
。如果存在,返回 true
;否则,返回 false
。
示例 1:
1 | 输入:nums = [1,2,3,1], k = 3 |
示例 2:
1 | 输入:nums = [1,0,1,1], k = 1 |
示例 3:
1 | 输入:nums = [1,2,3,1,2,3], k = 2 |
提示:
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
0 <= k <= 10^5
2. 思路
初始化哈希表
map
用于记录数值出现的下标位置遍历
nums
数组,判断哈希表中是否存在该数值,如果存在该值,则判断该值下标位置与当前值下标位置是否满足题目要求的abs(i - j) <= k
条件- 如果满足,则直接返回结果
true
- 如果不满足,则将当前数值放入哈希表中
- 如果满足,则直接返回结果
将当前数值下标放置入哈希表可能会存在覆盖的情况,但没关系因为始终要保证两个数值的下标距离尽可能的小,以此满足题目
abs(i - j) <= k
条件
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(n)