剑值offer03.数组中的重复数字
剑值offer03.数组中的重复数字。 1
题目描述
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
思路
1. 遍历列表,用字典进行统计
Code :
def findRepeatNumber(self, nums: List[int]) -> int:
dic ={}
res = []
for i in range(len(nums)):
if nums[i] in dic:
res.append(nums[i])
break
else:
dic[nums[i]] = 1
return res[0]
时间复杂度:O(n); 空间复杂度:O(n)
总结:
2. 排序,然后遍历,计算相邻两个数据是否想等即可。
code:
def findRepeatNumber(self, nums: List[int]) -> int:
# 冒泡排序
# nums.sort()
def pubble(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if nums[j]>nums[j+1]:
nums[j+1],nums[j]=nums[j],nums[j+1]
return nums
nums = pubble(nums)
for i in range(len(nums)-1):
if nums[i]==nums[i+1]:
return nums[i]
总结:因为偷懒写了个冒泡排序,允许超出时间范围了。。。,如果直接调用sort函数的话,执行时间还可以的哦!
3.用set函数,挨个往set中add数字,如果set的len不等于i+1,那说明肯定有重复的。
Code:
def findRepeatNumber(self, nums: List[int]) -> int:
tmp = set()
for i in range(len(nums)):
tmp.add(nums[i])
if len(tmp)<i+1:
return nums[i]