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...