题目描述:
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
请找出数组中任意一个重复的数字。
示例:
输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3
class Solution {
public int findRepeatNumber(int[] nums) {
//创建一个空的HashSet。Set的特性是元素不重复
Set<Integer> set = new HashSet<Integer>();
//遍历数组
for(int num:nums)
{
//如果往Set中添加元素失败,说明Set中已经存在相同的元素了
if(!set.add(num))
{
//返回这个重复元素
return num;
}
}
//遍历完数组中的全部元素后,没有找到重复元素的话,就返回-1
return -1;
}
}
复杂性分析:
1.时间复杂度:O(n)
- 遍历数组:O(n)
- 往HashSet中添加元素:O(1)
2.空间复杂度:O(n)
- 如果所有元素都不重复,就都存入Set,占用O(n)额外空间