在乙個長度為n+1的陣列裡的所有數字都在 1~n 的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。例如,如果輸入長度為 8 的陣列 ,那麼對應的輸出是重複的數字 2 或者 3。
這道題目可以把 1~n 數字從中間的數字 m 分為兩部分,前面一半為 1~m,後面一半為 m+1~n。如果 1~m 的數字的數目超過 m,那麼這一半的區間裡一定包含重複的數字;否則,另一半 m+1~n 的區間裡一定包含重複的數字。
以長度為 8 的陣列 為例分析查詢的過程。長度為 8 所以中間的數字為 4,把這個陣列分為兩部分,一段是 1~4,另一部分是 5~7。接下來統計 1~4 這 4 個數字在陣列**現的次數,它們一共出現了 5 次,因此這 4 個數字中一定存在重複的數字。
接下來把 1~4 的範圍一分為二,一段是 1、2 兩個數字,另一段是 3、4 兩個數字。數字 1、2 出現了兩次,因此統計 3、4 出現的次數,它們一共出現了三次,因此存在重複的數字。再分別統計 3 和 4 出現的次數,最終輸出的結果是 3。
public int solution2(int numbers)
if(count>(mid-start+1))
end = mid;
else
start = mid+1;
} return -1;
}private int countrange(int numbers,int start,int end)
return count;
}
不修改陣列找出重複的數字
題目二 在乙個長度為n 1的陣列裡的所有數字都在1 n的範圍裡,所有陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。方法一 優於題目要求不能修改輸入的陣列,我們可以建立乙個長度為n 1的輔助陣列,然後逐一把原陣列的每個數字複製到輔助陣列。如果原陣列中被複製的數字是...
不修改陣列找出重複的數字
給定乙個長度為 n 1 的陣列nums,陣列中所有的數均在 1 n 的範圍內,其中 n 1。請找出陣列中任意乙個重複的數,但不能修改輸入的陣列。樣例給定 nums 2 3,5 4,3 2,6 7 返回 2 或 3。思考題 如果只能使用 o 1 的額外空間,該怎麼做呢?暴力做法在此不做敘述,這裡講述空...
陣列 不修改陣列找出重複的數字
不修改陣列找出重複的數字 題目 在乙個長度為n 1的陣列裡的所有數字都在1到n的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的 陣列。例如,如果輸入長度為8的陣列,那麼對應的輸出是重複的數字2或者3。方法 我們把從1 n的數字從中間的數字m分為兩部分,前面...