题目描述
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
我的解题思路:因为n给定长度,没有限制空间复杂度,就用一个足够长的字典表,遍历数组的时候如果字典表中的该值大于1则直接返回
func findRepeatNumber(nums []int) int {
var array [100000]int
var index int
for index<len(nums){
array[nums[index]]++
if array[nums[index]]>1{
return nums[index]
}
index++
}
return index
}
该题可选择的解题方式还挺多的,不过针对不对的空间复杂度和时间复杂度要求思路也就不同
官方写法如下:
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
int repeat = -1;
for (int num : nums) {
if (!set.add(num)) {
repeat = num;
break;
}
}
return repeat;
}
}
复杂性分析
时间复杂度:O(n)。
遍历数组一遍。使用哈希集合(HashSet),添加元素的时间复杂度为 O(1),故总的时间复杂度是O(n)。
空间复杂度:O(n)。不重复的每个元素都可能存入集合,因此占用O(n) 额外空间。
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/solution/mian-shi-ti-03-shu-zu-zhong-zhong-fu-de-shu-zi-b-4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。