219. Contains Duplicate II

两种方法

方法一:扫描数组,在指针指向的元素+k范围内寻找是否有相同元素,找到则返回,没找到则继续扫描。

 1 static const auto _____ = []()
 2 {
 3     ios::sync_with_stdio(false);
 4     cin.tie(nullptr);
 5     return nullptr;
 6 }();
 7 
 8 class Solution {
 9 public:
10     bool containsNearbyDuplicate(vector<int>& nums, int k) {
11         if (k >= 35000)
12             return false;
13         
14         int currentNum;
15         for(int i = 0; i< nums.size(); i++)
16         {
17             currentNum = nums[i];
18             for(int j = i + 1; j <= i + k && j < nums.size(); j++)
19             {
20                 if(currentNum == nums[j])
21                     return true;
22             }
23         }
24         return false;
25         
26     }
27 };

方法二:利用关联容器,扫描数组,并检测关联容器,若容器内已有该关键值,则计算当前距离,若没有,则放入容器内。关键值为数组元素,值为元素对应下标。

最后对比最小距离和给定的k,即可输出。

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     bool containsNearbyDuplicate(vector<int>& nums, int k) 
12     {
13         if(k>=35000)
14             return false;       
15         unordered_map<int,int> imap;
16         int mindis=INT_MAX;
17         int sz=nums.size();
18         for(int i=0;i<sz;i++)
19         {
20             if(imap.count(nums[i])==1)
21             {
22                 int curdis=i-imap[nums[i]];
23                 mindis=min(curdis,mindis);
24             }
25             imap[nums[i]]=i;
26         }
27         return mindis<=k;
28     }
29 };

猜你喜欢

转载自www.cnblogs.com/zhuangbijingdeboke/p/9077491.html