# LeetCode 217、存在重复元素

# 一、题目描述

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

提示:

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

# 二、题目解析

# 三、参考代码

# 代码一

哈希集合API讨巧解法

# 题目:LC217. 存在重复元素
# 难度:简单
# 作者:闭着眼睛学数理化
# 算法:哈希集合调API讨巧解法
# 代码看不懂的地方,请直接在群上提问

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        return (len(set(nums)) != len(nums))

# 由于哈希集合具有不包含重复元素的性质,
# 如果nums列表中存在重复元素,将其转换成哈希集合后长度必然减少
# 所以我们只需要判断set(nums)的长度和nums的长度是否一致即可得到答案
# 如果长度一致,则返回False,说明nums不包含重复元素
# 如果长度不一致,则返回True,说明nums包含重复元素

# 代码二

哈希集合遍历解法

  1. # Java 代码

// 登录 AlgoMooc 官网获取更多算法图解
// https://www.algomooc.com
// 作者:程序员吴师兄
// 微信:wzb_3377
// 代码有看不懂的地方一定要私聊咨询吴师兄呀
// 存在重复元素(LeetCode 217):https://leetcode.cn/problems/contains-duplicate/ 
class Solution {
    public boolean containsDuplicate(int[] nums) {

        // 使用数据结构 set 来存放 nums 里面的所有数字
        Set<Integer> set = new HashSet<>();

        // 遍历数组 
        for (int num: nums) {

            // 如果数字已经存在于 set 中,直接返回 true 
            if (set.contains(num)) {
                return true;
            }

            // 把元素添加到 set 中
            set.add(num);
        }

        // 如果成功遍历完数组,则表示没有重复元素,返回 false
        return false;
    }
}
  1. # C++ 代码

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {

        // 使用数据结构 unordered_set 来存放 nums 里面的所有数字
        unordered_set<int> s;

        // 遍历数组 
        for (int x: nums) {

            // 如果数字已经存在于 set 中,直接返回 true 
            if (s.find(x) != s.end()) {
                return true;
            }

            // 把元素添加到 set 中
            s.insert(x);
        }

        // 如果成功遍历完数组,则表示没有重复元素,返回 false
        return false;
    }
};
  1. # Python 代码

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        # 使用数据结构 set 来存放 nums 里面的所有数字
        pre = set()
        # 遍历数组 
        for num in nums:
            # 如果数字已经存在于 set 中,直接返回 true 
            if num in pre:
                return True
            # 把元素添加到 set 中
            pre.add(num)
        # 如果成功遍历完数组,则表示没有重复元素,返回 false
        return False