【数组】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 };

 

posted @ 2020-05-04 17:01  梦醒潇湘  阅读(164)  评论(0)    收藏  举报