剑指offer打卡Day12:数组中重复的数字
发布日期:2021-04-30 21:03:38 浏览次数:105 分类:精选文章

本文共 907 字,大约阅读时间需要 3 分钟。

在一个长度为n的数组中,所有数字都在0到n-1的范围内。我们需要找出数组中第一个重复的数字。同时,如果数组中没有重复的数字,函数应该返回false,否则返回true,并将重复的数字放到duplication[0]中。

解法思路

为了高效地解决这个问题,我们可以使用集合数据结构来跟踪已经出现的数字。具体步骤如下:

  • 初始化一个集合,用于记录已经遇到的数字。
  • 遍历数组中的每个元素。
  • 对于当前元素,检查它是否已经存在于集合中。
    • 如果存在,则说明这是第一个重复的数字,记录下来并返回true。
    • 如果不存在,将其添加到集合中继续检查下一个元素。
  • 如果遍历完整个数组仍未找到重复的数字,返回false。
  • 这种方法的时间复杂度是O(n),空间复杂度是O(n)。

    代码实现

    public boolean duplicate(int[] numbers, int length, int[] duplication) {    if (length <= 0 || numbers == null || numbers.length != length) {        return false;    }    HashSet
    set = new HashSet<>(); for (int num : numbers) { if (set.contains(num)) { duplication[0] = num; return true; } set.add(num); } return false;}

    代码解释

  • 输入检查:首先检查输入的数组是否有效,避免空指针或长度不匹配的情况。
  • 初始化集合:使用HashSet来存储已经遇到的数字,自动处理重复元素。
  • 遍历数组:对于每个数字,检查是否存在于集合中。
    • 如果存在,记录重复数字并返回true。
    • 如果不存在,将其添加到集合中。
  • 返回结果:如果遍历完所有元素仍未找到重复,返回false。
  • 这种方法简洁高效,能够在O(n)时间复杂度内解决问题。

    上一篇:NIO-selector选择器(七)
    下一篇:Spring的依赖注入和Spring Bean的配置及常用属性

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2026年06月04日 21时25分26秒