这道题目类似上道题目217,考查的主要是hash表的用法。
描述:
Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.
意为:给出一个int型的数组,找出是否存在两个重复的元素,并且它们的下标之间的距离是小于k的,是它们之间相隔了的元素个数必须小于k,如果给的k = 3,那么至多只能存在2个。
思路:
1.首先既然是判断数组nums的值是否相等,那么我们可以将nums的值作为key,key是唯一的。
2.还要对比它们的位置,那么我们就将其下标作为val存放在hash_map中。
每次我们添加元素进hash表中,判断一下是否存在了这个元素,存在的话再拿出这个元素的val(也就是下标)和当前的nums元素下标比较,是否满足小于k的条件。
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int,int> hash; //<val,index>
for(int i = 0;i < nums.size();i++){
if(hash.count(nums[i])){
if((i - hash[nums[i]] - 1) < k){
return true;
}
}
//将值,和下标存放到hash表中
hash[nums[i]] = i;
}
return false;
}
};
python:
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
hash = {}
//使用range方法来模拟c++中的for(i=0;i<size;i++)循环
for i in range(len(nums)):
if nums[i] in hash:
if (i-hash[nums[i]]-1) < k:
return True
hash[nums[i]] = i
return False