leetcode 217.存在重复元素

此题如果对空间复杂度有要求O(1).那就用时间复杂度为O(nlogn)的排序算法排序后,遍历一遍数组,相邻元素相等则说明重复。

若要求时间复杂度为O(n),那么就用哈希法。构建一个哈希表,然后观察哈希中元素的数量和原数组数量。具体到c++中,可以使用unordered_set。

 1 class Solution {
 2  public:
 3      bool containsDuplicate(vector<int>& nums) {
 4         unordered_set<int> u;
 5         for (auto i : nums)
 6             u.insert(i);
 7         if(nums.size() == u.size())  return false;
 8         else return true;
 9     }
10  };

 

 或者是每插入一个就寻找一次,这样实际速度应该更快一些。

 1 class Solution {
 2  public:
 3      bool containsDuplicate(vector<int>& nums) {
 4         unordered_set<int> u;
 5         for (auto i : nums){
 6             if(u.find(i)!=u.end())return true;
 7             u.insert(i);
 8         }
 9         return false;
10     }
11  };

 

posted @ 2020-08-20 22:22  布羽  阅读(145)  评论(0)    收藏  举报