一开始是这么做的,因为不确定数组中的数字是否从0开始,先计算了最大值和最小值。
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
#计数
#1、找到最大值和最小值,
max = nums[0]
min = nums[0]
for i in nums:
if i > max:
max = i
elif i < min :
min = i
# print(max,min)
#2、 定义数组count,大小为最大值-最小值+1,初始值都为零
count = [0]*(max-min+1)
#3、 遍历nums,计算每个元素的个数:以nums的元素为下标,对应位置的值加1。
for i in nums:
count[i-min] += 1
if count[i-min] > 1: #在统计的过程中判断,如果有重复的直接返回
return i
return -1 #没有重复元素,返回-1
数组中的数字最小值一定是0:
'''
长度为n的数组nums
所有数字【0,n-1】
找出数组中任意一个重复的数字
'''
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
#计数
#1、 定义数组count,大小为n,初始值都为零
count = [0]*len(nums)
#2、 遍历nums,计算每个元素的个数:以nums的元素为下标,对应位置的值加1。
for i in nums:
count[i] += 1
if count[i] > 1: #在统计的过程中判断,如果有重复的直接返回
return i
return -1 #没有重复元素,返回-1
这个少了计算最大值最小值的步骤,速度快很多,但是空间还是和之前的一样。
时间复杂度:O(n),空间复杂度:O(n)
但是看了书之后,发现有个问题,就是没有考虑数组值不在0-n-1内的情况。