陣列中重複的數字

2021-09-27 06:32:56 字數 1150 閱讀 3257

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

//方法1:hashmap   o(n)  o(n)

class solution {

public:

// parameters:

// numbers: an array of integers

// length: the length of array numbers

// duplication: (output) the duplicated number in the array number

// return value: true if the input is valid, and there are some duplications in the array number

// otherwise false

bool duplicate(int numbers, int length, int* duplication) {

if(length<=0) return false;

unordered_mapum;

for(int i=0;i如果當前numbers[i]不在i位置

//---->(1)numbers[i]==i存在,那麼通過最多(n-1-i)次就能歸位,幾次交換就會歸位幾個元素到正確位置,從而跳出迴圈

//---->(2)numbers[i]==i不存在,那麼通過最多(n-1-i)次就能找到重複元素,跳出迴圈

//-->如果當前numbers[i]在i位置

//---->不進入迴圈,繼續下乙個位置i

//問題2:這個演算法為什麼是o(n)?

//看似for迴圈中還有一層while迴圈,時間複雜度可能是o(n^2),但是乙個while迴圈的n次迴圈導致後續

//for迴圈元素都在已歸位位置,不會進入while迴圈,因此while迴圈只是某幾次操作,對for迴圈整體來

//說,複雜度分攤,就是常數級別的複雜度,故整體複雜度為o(n)

陣列 陣列中重複的數字

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