给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使 nums [i] = nums [j],并且 i 和 j 的绝对差值最大为 k。
详见:https://leetcode.com/problems/contains-duplicate-ii/description/
Java实现:
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { int n=nums.length; if(n==0||nums==null){ return false; } Map<Integer,Integer> m=new HashMap<Integer,Integer>(); for(int i=0;i<n;++i){ if(m.containsKey(nums[i])&&(i-m.get(nums[i])<=k)){ return true; } m.put(nums[i],i); } return false; } }
C++实现:
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { int size=nums.size(); if(size==0||nums.empty()) { return false; } unordered_map<int,int> m; for(int i=0;i<size;++i) { if(m.find(nums[i])!=m.end()&&i-m[nums[i]]<=k) { return true; } m[nums[i]]=i; } return false; } };