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 };

浙公网安备 33010602011771号