Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.
s思路:
1. 找重复,套路就是用hash.
2. 还看见一种比较粗暴但有趣的做法:见方法2.把所有数全部用来初始化unordered_set,然后比较size即可,实在是妙,虽然粗暴了些,因为如果一个一个的添加到unordered_set,就可以在中间任何位置发现就得出结论,不用把所有数都放入unordered_set。这样只追求代码的长度的方式,看看就得了!但是这种用一个数据结构去初始化另一个数据结构的方法,还是值得提倡的,比如,上一道题用priority_queue,我就试着用vector去初始化这个heap,代码确实简洁太多,这点就很好!
//方法1:用unordered_set,一个一个放数据
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
//
unordered_set<int> ss;
for(int n:nums){
if(!ss.count(n)){
ss.insert(n);
}else
return true;
}
return false;
}
};
//方法2:用unordered_set,全部放入
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
//
unordered_set<int> ss(nums.begin(),nums.end());
return ss.size()!=nums.size();
}
};
//方法2.1:用unordered_set,全部放入,一行代码,程序简洁,虽然速度不咋地!
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
//
return nums.size()!=unordered_set<int>(nums.begin(),nums.end()).size();
}
};