【数组】219. 存在重复元素 II
题目:

解答:
思路:哈希。
(1)维护一个哈希表,里面始终最多包含 k 个元素,当出现重复值时则说明在 k 距离内存在重复元素;
(2)每次遍历一个元素则将其加入哈希表中,如果哈希表的大小大于 k,则移除最前面的数字;
(3)时间复杂度:O(n)O(n),nn 为数组长度;
1 class Solution { 2 public boolean containsNearbyDuplicate(int[] nums, int k) { 3 HashSet<Integer> set = new HashSet<>(); 4 for(int i = 0; i < nums.length; i++) { 5 if(set.contains(nums[i])) { 6 return true; 7 } 8 set.add(nums[i]); 9 if(set.size() > k) { 10 set.remove(nums[i - k]); 11 } 12 } 13 return false; 14 } 15 }
另外一种实现方法:
1 class Solution { 2 public: 3 bool containsNearbyDuplicate(vector<int>& nums, int k) 4 { 5 unordered_map<int, int> hash; 6 if (nums.size() <= 1) 7 { 8 return false; 9 } 10 for (int i = 0; i < nums.size(); i++) 11 { 12 if (hash.count(nums[i]) > 0) 13 { 14 hash[nums[i]] = i - hash[nums[i]]; 15 if (hash[nums[i]] <= k) 16 { 17 return true; 18 break; 19 } 20 } 21 else 22 { 23 hash[nums[i]] = i; 24 } 25 } 26 return false; 27 28 } 29 };

浙公网安备 33010602011771号