面試題3(一) 找出陣列重複的數字

2022-06-01 19:30:08 字數 873 閱讀 5329

// 面試題3(一):找出陣列中重複的數字

// 題目:在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,

// 也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,

// 那麼對應的輸出是重複的數字2或者3。

從頭到尾掃瞄陣列,當掃瞄到下標為i的數字a[i]=m,

如果i=m,那麼m就在他自己的位置上,繼續下乙個。

如果i!=m,說明m不在自己的位置a[m]上,

再比較a[m]和m,如果a[m]=m,說明m在下標為i和m的地方都出現了,找到乙個重複數字,返回。

如果a[m]!=m,說明m暫時只出現了一次,交換a[i]和a[m],把m放到自己的位置上。

不斷重複這個過程,就可以找到乙個重複的數字。

if

(陣列元素與長度引數不合規範)

for(遍歷陣列每乙個元素)

交換a[i] 和a[a[i]];    

}   

}

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

//陣列元素不合要求

for(int i=0;i)

}//輸入合法,開始尋找

for(int i=0;i)

//numbers[i]與numbers[numbers[i]]不等,交換位置

int temp=numbers[i];

numbers[i]=numbers[temp];

numbers[temp]=temp;

}}return false

;}

參照參考資料

面試題3(一) 找出陣列重複的數字

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

面試題3(二) 不修改陣列找出重複的數字

面試題3 二 不修改陣列找出重複的數字 題目 在乙個長度為n 1的陣列裡的所有數字都在1到n的範圍內,所以陣列中至 少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的 陣列。例如,如果輸入長度為8的陣列,那麼對應的 輸出是重複的數字2或者3。不能修改陣列,可以建立乙個長度為n 1...

面試題3 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...