力扣 陣列中重複的數字 劍指offer原題

2021-10-06 07:02:35 字數 1273 閱讀 7198

2020 05.18 22:40

題目描述:

找出陣列中重複的數字。

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

示例 1:

輸入:

[2, 3, 1, 0, 2, 5, 3]

輸出:2 或 3

限制:

2 <= n <= 100000

解法一:雜湊表/set

​ 該思路很容易想到,只要有重複,那麼就是它。

class

solution

hashset

set =

newhashset

<

>()

;for

(int i =

0; i < nums.length; i++

) set.

add(nums[i]);

}return-1

;}}

時間複雜度:o(n)

空間複雜度:o(n)

解法二:原地作雜湊

class

solution

for(

int i =

0; i < nums.length; i++

)swap

(nums, i, nums[i]);

}}return-1

;}public

void

swap

(int

nums,

int i,

int j)

}

時間複雜度:o(n)對於while迴圈,是為了讓每個數到它應該的位置,如果某個數在找到位置時花的次數很多,那麼後面的數花的就比較少,因為確定位置的數不會再動了。均攤下來就不會出現最壞的:每個都很多次這種,因為確定的越多,後面就比較的越少。

空間複雜度:o(1)

劍指Offer (陣列)陣列中重複的數字

題目鏈結 題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。解決方法class solution retur...

劍指offer 陣列 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。遍歷每乙個數字,在其後的數字中查詢是否有含有相同的數字 coding...

劍指offer 陣列中重複的數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。class solution 考慮這種非法輸入 for i...