题目描述
给定一个整数数组和一个整数 k
,判断数组中是否存在两个不同的索引 i
和 j
,使得 nums [i] = nums [j]
,并且 i
和 j
的差的 绝对值 至多为 k
。
样例
输入: 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
算法分析
哈希表
枚举所有的数,用哈希表存储上一个与当前数相同的位置j
,
- (1)、若哈希表中存在该数,则判断
i - j <= k
的关系 - (2)、记录该数
nums[i]
的位置
时间复杂度 $O(n)$
Java 代码
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0;i < nums.length;i ++)
{
int x = nums[i];
if(map.containsKey(x) && i - map.get(x) <= k) return true;
map.put(x, i);
}
return false;
}
}