第74天。 今天的题目是Contains Duplicate II: 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 absolute difference between i and j is at most k. 显然这道题目可以用两个循环去实现,但是这样会超时,效率不高。 这里是用Hash Table去做的,key存储nums[i],value存储i,这样我们用O(n)的时间就可以完成了。 1bool containsNearbyDuplicate(vector<int>& nums, int k) {2 unordered_map<int,int> m;3 for(int i = 0;i < nums.size();i++) {4 if (m.find(nums[i]) != m.end() && m[nums[i]] + k >= i) return true;5 m[nums[i]] = i;6 }7 return false;8} dicuss中的做法是用unordered_set去做的。 1bool containsNearbyDuplicate(vector<int>& nums, int k)2{3 unordered_set<int> s;4 5 if (k <= 0) return false;6 if (k >= nums.size()) k = nums.size() - 1;7 8 for (int i = 0; i < nums.size(); i++)9 {10 if (i > k) s.erase(nums[i - k - 1]);11 if (s.find(nums[i]) != s.end()) return true;12 s.insert(nums[i]);13 }14 15 return false;1 collapsed line16}