ac了,这个比较简单,
1.先排序,
2.然后 从头扫起,遇到两个相等的说明有重复
/*
1.数组完全映射过去,
2.扫一遍,如果元素地址内的值大于1则返回true,否则返回false
*/
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.size()<2)return false;
sort(nums.begin(),nums.end());
// map<int,int> judge(nums.begin(),nums.end());
for(auto i=0;i<nums.size()-1;i++)
{
if(nums[i]==nums[i+1])return true;
}
return false;
}
};
就想用unordered_map做一下,咋写:
1. 循环映射,+1 判断
自己写的乱七八糟:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len=nums.size();
if(len<2)return false;
unordered_map<int,int> judge_map;
unordered_map<int,int>::iterator it;
// (*it).first; // the key value (of type Key)
// (*it).second;
for(auto i=0;i<len-1;i++)
{
// if(judge_map<nums[i]>)
judge_map.insert(make_pair(nums[i], 0));
printf(" %d\n",judge_map.second);
}
return false;
}
};
看大佬的:
Basic 48ms C++ solution with unordered_map
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if (nums.empty()) { return false; }
unordered_map<int,int> mp;
for (int i : nums) {
if (++mp[i] > 1) {
return true;
}
}
return false;
}
};
set的也很酷,,
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> rec;
for (auto& n : nums) {
if (rec.find(n) != rec.end()) {
return true;
}
rec.insert(n);
}
return false;
}
};