劍指offer 陣列中重複的數字

2021-10-08 12:56:01 字數 643 閱讀 7316

題目描述:

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

題解:

bool

duplicate

(int numbers,

int length,

int* duplication)

else}}

return

false;}

};

方法一中的乙個條件我們沒有用到。也就是資料的範圍是0-n-1。所以我們可以這麼做:

設定乙個指標i指向開頭0,

對於arr[i]進行判斷,如果arr[i] == i, 說明下標為i的資料正確的放在了該位置上,讓i++

如果arr[i] != i, 說明沒有正確放在位置上,那麼我們就把arr[i]放在正確的位置上,也就是交換

arr[i] 和arr[arr[i]]。交換之後,如果arr[i] != i, 繼續交換。

如果交換的過程中,arr[i] == arr[arr[i]],說明遇到了重複值,返回即可。

劍指offer 陣列中重複的數字

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

劍指offer 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。分析 雖然也ac了,但是沒仔細看題,可以利用題目已有條件做到更簡單的...

劍指offer 陣列中重複的數字

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