题目:
找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1
的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
解法:
时间优先,用字典的键来标志是否重复了。时间O(n), 空间O(n)
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
dictmap = {}
for i in nums:
if i in dictmap:
return i
dictmap[i] = i
空间优先。使用原数组排序。空间O(1), 时间O(n)
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
# 空间复杂度O(1)
i = 0
while i < len(nums):
while nums[i] != i:
if nums[i] == nums[nums[i]]:
return nums[i]
temp = nums[i]
nums[i] = nums[temp]
nums[temp] = temp
# nums[nums[i]], nums[i] = nums[i], nums[nums[i]] # 也可以用这种交换,但是注意位置,不能换过来,因为nums[i]如果已经被替换了,nums[nums[i]]的键就不是原来的那个了。
i += 1