剑指offer03找出数组中重复的数字

    技术2026-01-19  10

    自己学习记录,可能写的不是很清楚。 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

    示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000

    看到找到重复内容很快我就想到两种做法,单纯的for循环和哈希表。由于题中限制了N的大小,就知道单纯的for循环时间太长了(也太麻烦)其实还有另外一个很方便东西:集合。

    我们知道Set是一个不能重复的集合,这正好贴合了题目找出重复。 我们可以建立一个哈希表,把数组中数据依次存入哈希表,如果要存入的内容以存在会返回一个false值。 Java代码:

    public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<Integer>(); //创建哈希表 int flag=-1; //记录找到的数据 for(int n:nums) //foreach循环正适合数组 { if(!set.add(n)) //如果set中没有该值正常存入,如果有了用flag标记一下 { flag=n; break; } } return flag; }
    Processed: 0.032, SQL: 9