题目:
Given an array of integers and an integer
k
, find out whether there are two distinct indicesi
andj
in the array such thatnums[i] = nums[j]
and the absolute difference betweeni
andj
is at mostk
.
Example 1:Input: nums = [1,2,3,1], k = 3 Output: true
Example 2:
Input: nums = [1,0,1,1], k = 1 Output: true
Example 3:
Input: nums = [1,2,3,1,2,3], k = 2 Output: false
解释:
判断数组中是否有两个数数值相等而且他们之间idex的差的绝对值最大为k,显而易见用dict做,key值存放元素,value值存放当前的index,当不满足条件的时候更新字典。构造这样的dict是一种很常见的方法 ,比如Two Sum中就是这样构造字典的。
python代码:
class Solution(object):
def containsNearbyDuplicate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: bool
"""
if not nums:
return False
if len(nums)==len(set(nums)):
return False
_dict={}
for i,v in enumerate(nums):
if v in _dict and i-_dict[v]<=k:
return True
_dict[v]=i
return False
c++代码:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
map<int ,int >_map;
for (int i=0;i<nums.size();i++)
{
if(_map.count(nums[i]) && i-_map[nums[i]]<=k)
return true;
_map[nums[i]]=i;
}
return false;
}
};
总结: