链接
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
代码语言:javascript复制输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
说明
- 2 <= n <= 100000
思路
倒序思考
代码语言:javascript复制// 此题可以定义一个map来判断,但是有没有更好地方法不开辟新的空间来做,
// 由于数组中的元素都大于等于0,把对应位置的值变为负数
func findRepeatNumber(nums []int) int {
for _,j := range nums {
if j < 0 {
j = -1 * j
}
if nums[j] < 0 {
return j
}else{
nums[j] = -1 * j //设置为负数
}
}
return 0 // 由于0没有办法变为负数,所以一旦走到这里,一定是0
}