題目描述:
給定乙個長度為n+1的陣列nums
,陣列中所有的數均在1∼n 的範圍內,其中 n≥1。
請找出陣列中任意乙個重複的數,但不能修改輸入的陣列。
樣例
給定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。
返回 2 或 3。
思考題:如果只能使用 o(1)的額外空間,該怎麼做呢?
題目思路:
該題目主要使用二分查詢的思路和抽屜原理,即在1~n範圍內有n+1個數則必定有重複的數。那麼如果不在原陣列上進行修改並且不新建陣列的情況下,就是用二分法。以數值大小進行分割,檢視兩邊哪邊有多出來的數那就在那一邊繼續進行分割直到找到重複的數為止。該題目需要注意的情況有:
1、陣列不包含重複的數字
2、無效的輸入(空陣列等)
3、中間值的判定,小心陣列越界以及一邊包含中間值的情況下另一邊不能包含。
**實現:
func duplicateinarray(nums int) int
for start <= end
if choose == 1 else
} return middle
}func search(nums int, start, middle int) int
} if num <= middle-start+1 else
}
劍指Offer 不修改陣列找出重複的數字
在乙個長度為n 1的陣列裡,所有的數字都在1 n的範圍內,所以陣列中至少有乙個數字是重複的 因為長度為n 1,而1 n只有n個數字,也就是說就算每個數字不一樣,都會空餘乙個位置,所以至少有乙個重複的數字 請找出陣列中任意乙個重複的數字,但是不能修改輸入的陣列。例如,如果輸入長度為8的陣列,那麼對應輸...
劍指offer題目 不修改陣列找出重複的數字
沒有在牛客網的oj上找到這個題目所以寫在部落格裡記錄一下 題目 在乙個長度為n 1的陣列裡的所有數字都在1 n的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。例如,如果輸入長度為8的陣列,那麼對應的輸出是重複的數字2或者3.題目中說了不能改變輸入的陣...
劍指offer3 2 不修改陣列找出重複的數字
在乙個長度為n 1的陣列裡的所有數字都在1到n的範圍內,所以陣列中至少有乙個數字是重複的。請找出陣列中任意乙個重複的數字,但不能修改輸入的陣列。例如,如果輸入長度為8的陣列,那麼對應的輸出是重複的數字2或者3。public static boolean duplicate2 int numbers,...