面試題03 陣列中重複的數字 Python3

2021-10-07 07:45:51 字數 1683 閱讀 5672

找出陣列中重複的數字。

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

示例 1:

輸入:[2, 3, 1, 0, 2, 5, 3]

輸出:2 或 3 

限制:2 <= n <= 100000

class solution:

def findrepeatnumber(self, nums: list[int]) -> int:

for i,value in enumerate(nums):

if value in nums[i+1:]: # 後面有相同的數

return value # 返回該數

return ('impossible')

但並不能通過:

還是超出時間限制,但看上去比之前的好一些:

flags = [-1] * len(nums) # 構造長度為len(nums),所有值均為1的list

for num in nums:

if flags[num] == -1: # 開始時,flags的第num個值必為1.每遍歷乙個num,就將flags的第num個值變為不是1的數

flags[num] = num

else: # 某一次,flags的第num個值不是1,這說明這次的num和上一次的num是乙個數,即重複了

return num # 返回重複值

這次效果就很好:

注意:上述**中的-1必須為負數!!這樣才能不和nums中的數相等。

方法1時間複雜度為:o(n^2) (for迴圈n,每次迴圈需要判斷又是n);空間複雜度為o(1).

方法2的時間複雜度為:o(n^2)(for迴圈n,每次迴圈需要判斷又是n);空間複雜度為o(n)(因為nums_1).

方法3的時間複雜度為:o(n)(for迴圈n,每次迴圈需要判斷是1);空間複雜度為o(n)(因為flags).

可以看到,方法3的時間複雜度明顯更低,因此能夠通過。

這也說明了寫**不僅要能夠執行,也要盡可能降低演算法的複雜度。

面試題03 陣列中重複的數字

題目二 不修改陣列找出重複的數字 相似題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。解決這個問題的乙個簡單的...

面試題03 陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。只輸出第乙個重複的數字 示例 1 輸入 2,3,1,0,2,5,3 輸出 2解決辦法 使用hashset 如果出現...

面試題03 陣列中重複的數字

找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 c...