剑指 Offer 03. 数组中重复的数字
题目来源:剑指Offer03
题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
题目描述
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
1 2 3
| 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3
|
限制:
问题分析
统计重复元素常用方法是使用哈希表,如果统计的是元素明确范围的话建议使用数组。
示例代码
哈希表统计
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<>(); for(int i = 0 ;i <nums.length; i++){ if(set.contains(nums[i])){ return nums[i]; }else{ set.add(nums[i]); } } return 0; } }
|
执行结果:
数组统计
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public int findRepeatNumber(int[] nums) { int [] arr = new int[nums.length]; for(int i =0 ;i<nums.length;i++){ if(arr[nums[i]] == 1) return nums[i]; else arr[nums[i]]++; } return -1; } }
|
执行结果: