217.存在重复元素

  1. 217.存在重复元素
    1. 217.1 题目
    2. 217.2 题解
      1. 哈希表
      2. 排序
    3. 217.3 代码
    4. 217.4 运行结果

217.存在重复元素


217.1 题目

给你一个整数数组 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

217.2 题解

哈希表

// 方法一:哈希表
// 使用哈希表来记录每个数字的出现次数,如果有数字出现次数超过一次,则存在重复
static bool ContainsDuplicate1(int[] nums)
{
    // 创建一个 HashSet 用于存储出现过的数字
    HashSet<int> numSet = new HashSet<int>();

    // 遍历数组中的每个数字
    foreach (var num in nums)
    {
        // 尝试将当前数字添加到 HashSet 中,如果添加成功(即之前未出现过),Add 方法返回 true
        if (!numSet.Add(num))
        {
            // 如果添加失败,说明当前数字已经在 HashSet 中存在,表示存在重复,返回 true
            return true;
        }
    }

    // 如果遍历完整个数组都没有发现重复数字,返回 false
    return false;
}

排序

// 方法二:排序
// 先对数组进行排序,然后遍历数组,检查相邻元素是否相等
static bool ContainsDuplicate2(int[] nums)
{
    // 使用 Array.Sort 方法对数组进行升序排序
    Array.Sort(nums);

    // 遍历排序后的数组
    for (int i = 1; i < nums.Length; i++)
    {
        // 检查相邻元素是否相等,如果相等,表示存在重复,返回 true
        if (nums[i] == nums[i - 1])
        {
            return true;
        }
    }

    // 如果遍历完整个数组都没有发现重复数字,返回 false
    return false;
}

217.3 代码

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        #region 题目

        // 给你一个整数数组 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 <= 105
        // -109 <= nums[i] <= 109

        #endregion

        #region 测试

        // 示例 1
        int[] nums1 = { 1, 2, 3, 1 };
        bool result1 = ContainsDuplicate1(nums1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");
        bool result1_2 = ContainsDuplicate2(nums1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        int[] nums2 = { 1, 2, 3, 4 };
        bool result2 = ContainsDuplicate1(nums2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");
        bool result2_2 = ContainsDuplicate2(nums2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        // 示例 3
        int[] nums3 = { 1, 1, 1, 3, 3, 4, 3, 2, 4, 2 };
        bool result3 = ContainsDuplicate1(nums3);
        Console.WriteLine($"示例3 方法1 输出:{result3}");
        bool result3_2 = ContainsDuplicate2(nums3);
        Console.WriteLine($"示例3 方法2 输出:{result3_2}");

        #endregion
    }

    #region 答案

    // 方法一:哈希表
    // 使用哈希表来记录每个数字的出现次数,如果有数字出现次数超过一次,则存在重复
    static bool ContainsDuplicate1(int[] nums)
    {
        // 创建一个 HashSet 用于存储出现过的数字
        HashSet<int> numSet = new HashSet<int>();

        // 遍历数组中的每个数字
        foreach (var num in nums)
        {
            // 尝试将当前数字添加到 HashSet 中,如果添加成功(即之前未出现过),Add 方法返回 true
            if (!numSet.Add(num))
            {
                // 如果添加失败,说明当前数字已经在 HashSet 中存在,表示存在重复,返回 true
                return true;
            }
        }

        // 如果遍历完整个数组都没有发现重复数字,返回 false
        return false;
    }

    // 方法二:排序
    // 先对数组进行排序,然后遍历数组,检查相邻元素是否相等
    static bool ContainsDuplicate2(int[] nums)
    {
        // 使用 Array.Sort 方法对数组进行升序排序
        Array.Sort(nums);

        // 遍历排序后的数组
        for (int i = 1; i < nums.Length; i++)
        {
            // 检查相邻元素是否相等,如果相等,表示存在重复,返回 true
            if (nums[i] == nums[i - 1])
            {
                return true;
            }
        }

        // 如果遍历完整个数组都没有发现重复数字,返回 false
        return false;
    }


    #endregion
}

217.4 运行结果

示例1 方法1 输出:True
示例1 方法2 输出:True
示例2 方法1 输出:False
示例2 方法2 输出:False
示例3 方法1 输出:True
示例3 方法2 输出:True


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏