LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法

剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
题解 解法1
时间O(nlogn)
空间O(1)
排序后直接比较紧挨着的两个数是否相同即可

class Solution: def findRepeatNumber(self, nums: List[int]) -> int: nums.sort() n = len(nums) for i in range(n): if i == n-1: return if nums[i] == nums[i+1]: return nums[i]

LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法
文章图片

解法2
时间O(n)
空间O(n)
新建列表,存储nums超过1return
class Solution: def findRepeatNumber(self, nums: List[int]) -> int: num=[0 for i in range(len(nums))] for i in nums: num[i]+=1 if num[i]>=2: return i

LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法
文章图片

解法3
时间O(n)
空间O(1)
交换本身列表,把每个i放在对应的nums[i]上,即,把0放nums[0],6放nums[6]上,若又有一个6,即,6==nums[6]时找到重复,return
class Solution: def findRepeatNumber(self, nums: List[int]) -> 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] #注意这里不要写成nums[i], nums[nums[i]] = nums[nums[i]], nums[i]

【LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法】LeetCode|LeetCode剑指 Offer 03. 数组中重复的数字python3 3种解法
文章图片

    推荐阅读