Python-[2]面试题03.数组中重复的数字
题目
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
P.S.题目来源Leetcode,这是我的题解
解题思路
只是找到任意一个重复数字即可,排序遍历一下就好,或使用散列表(集合)处理一下就可。
code:使用nums.sort()
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
#只是找到任意一个重复数字即可,排序遍历一下就好
nums.sort()
for i in range(1,len(nums)):
if nums[i] ==nums[i-1]:
return nums[i]
return None
code:手写quicksort
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
#只是找到任意一个重复数字即可,排序遍历一下就好
def quicksort(nums):#***
if len(nums) < 2: return nums
base_idx = len(nums)//2
la = [i for i in nums[:base_idx]+nums[base_idx+1:] if i<nums[base_idx]]
ra = [i for i in nums[:base_idx]+nums[base_idx+1:] if i>=nums[base_idx]]
return quicksort(la)+[nums[base_idx]]+quicksort(ra)
nums = quicksort(nums)
for i in range(1,len(nums)):
if nums[i] ==nums[i-1]:
return nums[i]
return None
code:Hash map
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
#或者使用set来进行判断
vis = set()
for item in nums:
if item in vis:
return item
else:vis.add(item)
return None