在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。
数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
请找出数组中任意一个重复的数字。
解题思路见注释
class Solution(object):
def findRepeatNumber(self, nums):
# 方法一排序:
# 相邻元素相同即为重复
# 时间o(nlogn) 空间o(1)
# nums.sort()
# for i in range(len(nums)):
# if nums[i+1]==nums[i]:
# return nums[i]
# 方法二哈希:
# 键值相同即为重复
# 时间o(n) 空间o(n)
# repeatDict = {}
# for num in nums:
# if num not in repeatDict:
# repeatDict[num] = 1
# else:
# return num
# 方法仨排座位:
# 每个数都放到自己的座位上,座位上的数和座位号不一样就和它换
# 如果某个数要换座且发现对于座位号上元素符合座位号就说明重复
# 时间o(n) 空间o(1)
n = len(nums)
for i in range(n):
while i != nums[i]:
if nums[i] == nums[nums[i]]:
return nums[i]
nums[nums[i]], nums[i] = nums[i], nums[nums[i]]