Leetcode 剑指 Offer 03.数组中重复的数字
1 题目描述(Leetcode题目链接)
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制: 2 ≤ n ≤ 100000 2 \le n \le 100000 2≤n≤100000
2 题解
简单直观的方法就是用哈希表,但是题目中的 n n n有规定范围,使用数组可以了。这里使用数组来做。
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
length = len(nums)
repeat = [0] * length
for num in nums:
if repeat[num] == 1:
return num
else:
repeat[num] += 1
return -1
利用上面的做法可以缩小空间复杂度,不用新开辟数组,直接在原数组上修改。
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
length = len(nums)
for i in range(length):
while nums[i] != i:
if nums[i] == nums[nums[i]]:
return nums[i]
nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
return -1