217. 存在重复元素 - 力扣(LeetCode) 第一次写完直接运行测试用例全部通过的:
map
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
map<int ,int>map;
for(auto ch:nums)
{
map[ch]++;
}
for(auto a:map)
{
if(a.second>=2)return true;
if(a.second==1)return false;
}
return false;
}
};
但是提交之后有没通过:
原因
看没通过的那个测试用例 正确结果为true, 我却输出false ,肯定是代码判断部分出问题了。
第14行 原题中说:如果数组中每个元素互不相同,返回 false 。
所以我这里判断了下如果出现次数是1次就返回false。
但是问题是这里是for循环,假设现在才遍历到第一个2,只出现了一次,就直接返回false了。实际上后面还有两个2.
所以我们应该等循环完之后再判断是否只出现了一次。
改成这样即可:
如果是2次或更多在循环内部直接就return true终止程序了,能走到最后循环外这个return false说明1上面没有return true,即没有出现两次或更多,那就说明只出现了一次,return false即可。
这是我少数不多不看题解写出来的,而且是用map写的,我一般只会暴力。
虽然是个简单题。
第二种方法,看别人的
哈希
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> m;
for(int x:nums)
{
if(m.find(x)!=m.end())
{
//没有返回 end()说明在哈希表里找到了该数,也就是该数之前出现过。
return true;
}
m.insert(x);
}
//没有找到,说明之前没出现过,加入哈希表里面。
return false;
}
};