在乙個長度為 n 的陣列裡的所有數字都在 0 到 n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。
例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
第一反應就是寫巢狀的for迴圈,但是可想而知,必然時間複雜度不滿足需求…
題目要求時間複雜度o(n),空間複雜度o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。
思路:對於這種陣列元素在[0, n-1]範圍內的問題,可以將值為i的元素調整到第i個位置上進行求解。
以(2,3,1,0,2,5)為例,第乙個「2」,將其與index=2處的「1」進行位置交換,然後再看此時index = 0處的「1」,將其交換到index = 1的位置,如此繼續,到第二個「2」出現時,會發現index = 2的位置已經有了2了,所以這是乙個重複的數字。
for迴圈遍歷陣列:
——判斷元素值是否與下標index相等
————若不相等:
——————判斷 numbers[i] 與 numbers[numbers[i]]是否相等:
————————若相等,說明存在重複數字;
————————若不相等,進行swap交換;
——若相等,則繼續遍歷;
class
solution
else}}
return
false;}
};
陣列中重複的數字(03)
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。分析 由於所有數字都在 0 n 1 之間,若該陣列按照 0 1 2 ...
03 陣列中的重複數字
題目描述 劍指offer3 在乙個長度為 n 的陣列裡的所有數字都在 0 到 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。示例input output 2首先放乙個時間複雜度 o n 空間複雜度 o 1 的方法,因為...
03 找出陣列中重複的數字 python
題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。數字中的某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出時重複的數字2或者3。1 使用字典 def duplicate nums dic ...