题目链接
英文链接:https://leetcode.com/problems/contains-duplicate-ii/
中文链接:https://leetcode-cn.com/problems/contains-duplicate-ii/
题目详述
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
示例 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 |
题目详解
方法一:
- 运用
HashSet
维护一个大小不超过k
的窗口。 - 遍历
nums
,判断当前元素是否存在于set
中。若存在,说明满足条件,返回true
即可。 - 维护
set
,即添加当前元素到set
中,若大小超过k
,删除最前面的元素。
1 | public class LeetCode_00219 { |
方法二:
- 类似于 LeetCode3-无重复字符的最长字串,可以运用
HashMap
来解决本题。 - 运用一个
HashMap
存储当前元素到索引的映射。 - 遍历数组,如果发现当前元素在之前出现过,且两者的索引差值不超过
k
,说明满足条件,返回true
即可。 - 更新维护
map
。
1 | public class LeetCode_00219 { |