LeetCode-219-Contains Duplicate II-E(檢驗是否有重複數字2)
阿新 • • 發佈:2018-12-11
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.(i和j的距離在k以內)
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
思路:用unordered_set,並且始終保持set中的元素在k個以內,一旦超過k,就刪除前面的元素,這樣保證了set中不會有下標距離之差大於k的元素。
程式碼如下:
bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_set<int> s; if(k<=0) return false; if(k>=nums.size()) k=nums.size()-1; for(int i=0;i<nums.size();i++){ if(i>k) s.erase(nums[i-k-1]); if(s.find(nums[i])!=s.end()) return true; s.insert(nums[i]); } return false; }