陣列中重複的數字

2021-10-12 10:33:26 字數 1496 閱讀 8627

題目描述:

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

總體思路

利用題目所給的條件「所有的數字都在0~n-1的範圍內」,我們將陣列裡的數和下標對應起來,即numbers[i]==i,如果陣列中沒有重複的數字,那麼遍歷完陣列後數字i會出現在下標i的位置;如果有就直接返回。

分析

以陣列為例模擬程式步驟。

陣列的第0個數字為2,與下標不等,與下標為2的數字1交換,得到

接著,第0個數字1還是與下標0不等,再與下標1的數字3交換,得到

還是,第0個數字3與下標0不等,與下標3的數字0交換,得到

現在陣列裡的0,1,2,3分別都和下標對應,陣列遍歷來到了下標為4的數字2這裡,由於數字與下標不對應,我們想把這個2交換到下標為2的位置中,卻發現當前的2已經與下標為2的數字2相等了,這時候我們就找到了乙個重複的數字了。直接返回。

實現**

#include

using

namespace std;

bool

duplicate

(int numbers,

int length)

for(

int i=

0;ifor(

int i=

0;i)//交換兩數numbers[i]和numbers[numbers[i]]

int temp=numbers[i]

; numbers[i]

=numbers[temp]

; numbers[temp]

=temp;}}

return

false;}

intmain()

;int length=

sizeof

(a)/

sizeof

(a[0])

;//求陣列長度 if(

duplicate

(a,length)

)return0;

}

複雜度

時間複雜度,雖然有兩重迴圈,但是內迴圈裡,每個數字最多只要交換兩次就能找到屬於它的位置,因此總時間複雜度為o(n)

沒有使用額外的空間,因此時間複雜度為o(1)

純粹記錄演算法,歡迎指正!!!

i am just a hamal of code!!!

陣列 陣列中重複的數字

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