📅  最后修改于: 2023-12-03 14:48:43.785000             🧑  作者: Mango
给定一个整数数组和一个整数 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
维护一个大小为k的哈希表,记录已经遍历过的数字。当遍历到一个新的数字时,检查哈希表中是否已经存在该数字,如果存在,则判断两个索引的差是否不大于k,如果是,则返回true,否则将当前数字添加到哈希表中。这样做的时间复杂度为O(n),空间复杂度为O(k)。
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
hashmap = {} # 哈希表
for i in range(len(nums)):
if nums[i] in hashmap and i - hashmap[nums[i]] <= k:
return True
hashmap[nums[i]] = i
return False
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(nums[i]) && i - map.get(nums[i]) <= k) {
return true;
}
map.put(nums[i], i);
}
return false;
}
}
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> hashmap;// 哈希表
for (int i = 0; i < nums.size(); i++) {
if (hashmap.count(nums[i]) && i - hashmap[nums[i]] <= k) {
return true;
}
hashmap[nums[i]] = i;
}
return false;
}
};
经LeetCode运行测试,以上三种语言的代码均通过,无超时、无错误。