找出数组中的重复数字:剑指offer(Java)1【示例及解析】

需积分: 0 0 下载量 86 浏览量 更新于2024-04-01 收藏 819KB PDF 举报
剑指offer(Java)题目1要求在一个长度为n的数组nums里找出任意一个重复的数字。数组中的数字都在0~n-1的范围内,但有些数字是重复的。示例输入为[2, 3, 1, 0, 2, 5, 3],输出为2或3。题目限制为2 <= n <= 100000。 为解决这个问题,可以使用哈希表来记录数组中已经遍历过的数字,如果遍历到某个数字时发现该数字已经在哈希表中出现过,则该数字即为重复数字。具体实现可以参考以下Java代码: ```java class Solution { public int findRepeatNumber(int[] nums) { // 哈希表 Set<Integer> set = new HashSet<Integer>(); int res = -1; for(int num : nums) if(!set.add(num)) {// add失败返回false,说明该数字已经存在 res = num; break; // 找到一个重复数字即可 } return res; } } ``` 以上代码首先定义了一个HashSet来作为哈希表,然后遍历数组nums,对于每个数字,尝试将其加入HashSet,如果add方法返回false,说明该数字重复,将其赋值给res并结束循环。最终返回res即可得到任意一个重复的数字。 这种方法的时间复杂度为O(n),空间复杂度也为O(n),可以在较短的时间内找到重复数字,适用于数组规模不是很大的情况。此外,该方法对于解题思路也具有一定的指导意义,即通过哈希表记录遍历到的元素来判断是否重复。如果面对类似问题,可以尝试使用哈希表来解决。