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

2021-10-03 13:48:09 字數 1335 閱讀 5420

找出陣列中重複的數字。

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

示例 1:

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

輸出:2 或 3

限制:2 <= n <= 100000

思路1:

排序,然後判斷前後兩個元素是否相等,時間複雜度nlgn,空間複雜度1。**省略。

思路2:

借用dict,將遍歷過的元素存進去,每次遍歷都查閱dict中是否存在該數,時間複雜度n,空間輔助度n。**如下:

class

solution

:def

findrepeatnumber

(self, nums: list[

int])-

>

int:

ifnot nums:

return-1

tmp =

for i in

range

(len

(nums)):

if(nums[i]

in tmp)

:return nums[i]

else

: tmp[nums[i]]=

true

return

-1

思路3:

如果沒有重複數字,那麼正常排序後,數字i應該在下標為i的位置,所以思路是重頭掃瞄陣列,遇到下標為i的數字如果不是i的話,(假設為m),那麼我們就拿與下標m的數字交換。在交換過程中,如果有重複的數字發生,那麼終止返回。**如下:

class

solution

:def

findrepeatnumber

(self, nums: list[

int])-

>

int:

ifnot nums:

return-1

for i in

range

(len

(nums)):

while

(nums[i]

!= i):if

(nums[i]

== nums[nums[i]])

:return nums[i]

nums[nums[i]

], nums[i]

= nums[i]

, nums[nums[i]

]return

-1

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

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

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

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

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

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