陣列中重複的數字

2022-08-17 17:45:14 字數 1260 閱讀 8315

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

input:

output:

2

要求複雜度為 o(n) + o(1),也就是時間複雜度 o(n),空間複雜度 o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。牛客網討論區這一題的首票答案使用 nums[i] + length 來將元素標記,這麼做會有加法溢位問題。

這種陣列元素在 [0, n-1] 範圍內的問題,可以將值為 i 的元素調整到第 i 個位置上。

以 (2, 3, 1, 0, 2, 5) 為例:

要求複雜度為 o(n) + o(1),也就是時間複雜度 o(n),空間複雜度 o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。牛客網討論區這一題的首票答案使用 nums[i] + length 來將元素標記,這麼做會有加法溢位問題。

這種陣列元素在 [0, n-1] 範圍內的問題,可以將值為 i 的元素調整到第 i 個位置上。

以 (2, 3, 1, 0, 2, 5) 為例:

position-0 : (2,3,1,0,2,5) // 2 <-> 1

(1,3,2,0,2,5) // 1 <-> 3

(3,1,2,0,2,5) // 3 <-> 0

(0,1,2,3,2,5) // already in position

position-1 : (0,1,2,3,2,5) // already in position

position-2 : (0,1,2,3,2,5) // already in position

position-3 : (0,1,2,3,2,5) // already in position

position-4 : (0,1,2,3,2,5) // nums[i] == nums[nums[i]], exit

遍歷到位置 4 時,該位置上的數為 2,但是第 2 個位置上已經有乙個 2 的值了,因此可以知道 2 重複。

public boolean duplicate(int nums, int length, int duplication) 

swap(nums, i, nums[i]);}}

return false;

}private void swap(int nums, int i, int j)

陣列 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...

陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...

陣列中重複的數字

題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...