【剑指offer】03 数组中重复的数字
题目描述
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
分析
猛的一看还挺简单,注意时间效率和空间效率
1.直接排序,加一个for循环,找出和后一个相等的数字。时间是nlogn,空间是1
2.哈希表,遍历整个数组,当这个数字没有出现过哈希表的时候将其加入进去,如果在哈希表中则直接返回。时间是O(n),空间是O(n)
3.原地置换,遍历整个数组,将数组中的数值i放在第i个位置,若i位置已有数据,则发生重复。时间是O(n),空间是O(1)
解题
1.
class Solution: def findRepeatNumber(self, nums: List[int]) -> int: nums.sort() for i in range(len(nums)): if nums[i] == nums[i+1]: return nums[i]
2.
class Solution: def findRepeatNumber(self, nums: List[int]) -> int: dic = {} for i in nums: if i not in dic: dic[i] = 1 else: return i
3.
class Solution: def findRepeatNumber(self, nums: List[int]) -> int: for i in range(len(nums)): while nums[i] != i: if nums[nums[i]] == nums[i]: return nums[i] temp = nums[i] nums[i] = nums[temp] nums[temp] = temp