class Solution {
//方法零:暴力搜索 (n^2) 超出时间限制
/*public:
bool containsDuplicate(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
if(nums[i]==nums[j]){
return true;
}
}
}
return false;
}*/
//方法一:利用set,遍历数组插入,若能查找直接返回true,否则插入,直到最后从未查找成功则说明不存在重复,返回false (set底层用红黑树实现,插入、查找的时间复杂度为o(logn))
/*public:
bool containsDuplicate(vector<int>& nums) {
set<int> s1;
for (auto i = nums.cbegin(); i != nums.cend(); i++) {
if(s1.find(*i)!=s1.end())
return true;
else
s1.insert(*i);
}
return false;
}*/
//方法二:先对数组进行sort排序(o(nlogn)),再遍历排序后数组,比较相邻的两个数是否相同
/*public:
bool containsDuplicate(vector<int>& nums) {
if(nums.empty())
return false;
sort(nums.begin(), nums.end());
for(int i=1;i<nums.size();i++) {
if(nums[i-1]==nums[i])
return true;
}
return false;
}*/
//方法三:哈希散列。类似方法一,但是使用unordered_set(底层用哈希表实现,插入、查找的时间复杂度为o(n))
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s1;
for (auto i = nums.cbegin(); i != nums.cend(); i++) {
if(s1.find(*i)!=s1.end())
return true;
else
s1.insert(*i);
}
return false;
}
};