題目:在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
這道題主要是在思路上要想通。思路就是將每乙個數字,放到與它的數值相同的位置上,比如將2放到list[2]上,5放到list[5]上,因為數字的範圍在0到n-1之間,所以用數值作為索引不會出現陣列越界的情況。這個過程我們可以叫做數字歸位,在數字歸位的過程中,如果發現當前被歸位的數字所在的位置已經有乙個值相同的數字存在了,那麼,就說明有重複的數字,返回這個數字即可。
思路有了,具體實現很簡單。首先我們判斷這個數字是不是本來已經在正確的位置,也就是比較 list[i] 與 i 的是否相等。如果相等,則已經歸位好了,判斷下乙個即可。如果沒有歸位好,那麼交換 list[i] 與 list[list[i]]。當然,在交換之前,先判斷正確位置是不是已經有這個數了,如果有,返回這個數,如果沒有才真正進行交換。
c++**如下:
1class
solution
16else
swap(numbers[numbers[i]], numbers[i]);17}
18}19return
false;20
}21 };
陣列 陣列中重複的數字
在乙個長度為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 因為陣列中...