题目:
判断是否有重复值存在
以下有5种解法,依次优化
s1
#include <iostream>
#include <unordered_map>
using namespace std;
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
bool isCD = false;
unordered_map<int,int> um;
for(int i : nums)
um[i]++;
for(int i = 0; i < nums.size(); i++){
if(um[nums[i]] >= 2){
isCD = true;
break;
}
}
return isCD;
}
};
int main() {
int a[2] = {3,3};
vector<int> nums(a,a+2);
Solution s;
cout << s.containsDuplicate(nums) << endl;
system("pause");
return 0;
}
s2
#include <iostream>
#include <unordered_set>
using namespace std;
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> us;
for(int i : nums)
us.insert(i);
return nums.size() > us.size();
}
};
int main() {
int a[2] = {3,3};
vector<int> nums(a,a+2);
Solution s;
cout << s.containsDuplicate(nums) << endl;
system("pause");
return 0;
}
s3
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int,int> um;
for(int i = 0; i < nums.size(); i++){
um[nums[i]]++;
if(um[nums[i]] > 1) return true;
}
return false;
}
};
s4
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> us;
for(int i = 0; i < nums.size();i++){
us.insert(nums[i]);
if(us.size() < i+1) return true;
}
return false;
}
};