06 不修改陣列找出重複的數字

2021-10-07 15:54:38 字數 602 閱讀 3527

不修改陣列找出重複的數字

要求:在乙個長度為n+1的陣列,陣列內值為1~n,不能修改原本陣列

思路:使用分治思維,在乙個長度為n+1的陣列,陣列內值為1~n的情況下,必定存在資料重複情況。我們不在陣列上做文章,將焦點聚集在1-n的數值上。

將數值1-n分為兩部分[1,(n+1)/2],[(n+1)/2+1,n],統計兩部分數值在陣列**現的次數,若大於數值的個數,則必定重複,後續重複即可。

例如:陣列[1,2,3,4,5,3],數值為1-5,我們將數值分為[1,2,3]和[4,5],統計[1,2,3]在陣列**現的次數。若大於3次則必定存在重複。

public

class

offer06

;int start =1;

int end = arr.length;

//分治

while

(start//判斷計數情況

if(count>middle-start+1)

else

} system.out.

println

(end)

;}

不修改陣列找出重複的數字

題目二 在乙個長度為n 1的陣列裡的所有數字都在1 n的範圍裡,所有陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。方法一 優於題目要求不能修改輸入的陣列,我們可以建立乙個長度為n 1的輔助陣列,然後逐一把原陣列的每個數字複製到輔助陣列。如果原陣列中被複製的數字是...

不修改陣列找出重複的數字

在乙個長度為n 1的陣列裡的所有數字都在 1 n 的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。例如,如果輸入長度為 8 的陣列 那麼對應的輸出是重複的數字 2 或者 3。這道題目可以把 1 n 數字從中間的數字 m 分為兩部分,前面一半為 1 m...

不修改陣列找出重複的數字

給定乙個長度為 n 1 的陣列nums,陣列中所有的數均在 1 n 的範圍內,其中 n 1。請找出陣列中任意乙個重複的數,但不能修改輸入的陣列。樣例給定 nums 2 3,5 4,3 2,6 7 返回 2 或 3。思考題 如果只能使用 o 1 的額外空間,該怎麼做呢?暴力做法在此不做敘述,這裡講述空...