題目描述:
找出陣列中重複的數字。
乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。
陣列中某些數字是重複的,但不知道有幾個數字重複了,
也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。
示例:
輸入:[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
方法1:
將陣列變為有序,依次掃瞄有序陣列,若出現重複數字,則返回該值
def
find1
(nums)
: nums.sort(
)for i in
range
(len
(nums)-1
):if nums[i]
== nums[i+1]
:return nums[i]
複雜度分析:python中的sort()是基於快排實現的,所以時間複雜度為o(nlogn),空間複雜度為o(1)。
方法2:
利用字典,統計每個數字出現的次數,返回出現次數大於1的數字
def
find2
(nums)
:#dict.fromkeys設定任意的value
numdict =
dict
.fromkeys(nums,0)
for i in nums:
if i in numdict:
numdict[i]+=1
if numdict[i]
>1:
return i
複雜度分析:時間複雜度為o(n),空間複雜度為o(n)。
方法3:
重排陣列。從左到右依次掃瞄陣列,判斷第i個數字nums[i]是否和i相等。若相等,則掃瞄下乙個;若不等,則將第i個數字和第nums[i]個數字進行比較,相等的話則返回該值,不等的話將兩者交換。重複該過程,直到找到重複的數字。
def
find3
(nums)
:for i in
range
(len
(nums)):
while i != nums[i]
:if nums[i]
== nums[nums[i]]:
return nums[i]
else
: temp = nums[i]
nums[i]
= nums[temp]
nums[temp]
= temp
複雜度分析:時間複雜度為o(n),空間複雜度為o(1)。 陣列中重複的數字(1)
題目 找出陣列中的重複數字 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有哪幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者是3。第一種方法 暴力解決 對於每乙個數字...
1 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。從頭到尾依次遍歷陣列,比較下標為i的數字 用m表示 是否等於i。如果...
1 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回false...