217. 存在重复元素

105 阅读1分钟

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;
    }
};

image.png

但是提交之后有没通过:

image.png

原因

看没通过的那个测试用例 正确结果为true, 我却输出false ,肯定是代码判断部分出问题了。

image.png

第14行 原题中说:如果数组中每个元素互不相同,返回 false 。 所以我这里判断了下如果出现次数是1次就返回false。 但是问题是这里是for循环,假设现在才遍历到第一个2,只出现了一次,就直接返回false了。实际上后面还有两个2.

image.png

所以我们应该等循环完之后再判断是否只出现了一次。

改成这样即可:

image.png

如果是2次或更多在循环内部直接就return true终止程序了,能走到最后循环外这个return false说明1上面没有return true,即没有出现两次或更多,那就说明只出现了一次,return false即可。

image.png

这是我少数不多不看题解写出来的,而且是用map写的,我一般只会暴力。

虽然是个简单题。

第二种方法,看别人的

哈希

217. 存在重复元素 - 力扣(LeetCode)

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;
    }
};