最容易想到的办法是双遍历,但实际不可行,消耗的内存和运行的时间都会很大
解法1
用字典统计数字出现的次数,如果数字已经在字典里则返回数字
# 解法1
class Solution1:
def findRepeatNumber(self, nums) -> int:
count = dict()
for num in nums:
if num not in count:
count[num] = 1
else:
return num
解法2
原地哈希法,让每一个数字出现在固定的位置,如果当前数字在归位时发现位置已经被占了那么该数字就是要找的数字
# 解法2
class Solution2:
def findRepeatNumber(self, nums) -> int:
n = len(nums)
for i in range(n):
while i != nums[i]:
if nums[i] == nums[nums[i]]:
return nums[i]
temp = nums[i]
nums[i], nums[temp] = nums[temp], nums[i]