數組中重複的數字
找出數組中重複的數字。
在一個長度為 n 的數組 nums 裡的所有數字都在 0~n-1 的範圍内。數組中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數組中任意一個重複的數字。
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:
2 <= n <= 100000
方法1:
直接使用count函數,進行統計,遇到出現次數不為1的直接輸出即可。
【錯誤】:超過了限定的時間
python
class Solution(object):
def findRepeatNumber(self, nums):
for i in nums:
if nums.count(i) != 1: #統計出現的次數,如果不為1,直接輸出,并且傳回
print(i) #循環結束
return i
return '#'
方法2
思路:排序方法:
1、先将數組排好序
2、在查找重複數字:先用第一個元素進行對比,如果後邊有和它相等的,直接傳回該元素,沒有的話,用第二個元素和後繼的元素依次比較。
時間複雜度O(nlogn),空間複雜度O(1)
class Solution(object):
def findRepeatNumber(self, nums):
nums.sort() #排序
p = nums[0] #将第一個元素賦給p
for i in range(1, len(nums)): #對清單從第二個元素開始周遊
if p == nums[i]: #如果P=
return p
pre = nums[i]
方法3
思路:使用字典。
1、周遊整個數組,當這個數字沒有出現過字典裡有的元素的時候,将其加入進去,如果字典中存在,直接傳回即可
2、時間複雜度O(n),空間複雜度O(n)
class Solution(object):
def findRepeatNumber(self, nums):
dic = {} #定義空字典
for i in nums: #周遊數組
if i not in dic: #判斷數組元素是否在字典中,不在的話,就放進字典即可
dic[i] = 0 #value随便賦,因為是對key進行操作
else: #否則,直接傳回重複元素
return i