在乙個長度為 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 因為陣列中...