[變試]不修改陣列找重複陣列
在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字陣列中的數字在0~n-1的範圍內n=7
輸出:2或3
如果沒有重複的數字,當陣列排序後數字 i 應該出現在 index 為 i 的位置
重排陣列
從頭開始掃瞄陣列中的每個數字
if nums[i] != i
交換 index=i 和 index=nums[i] 陣列內的元素
交換之前判斷是否相等。
輸出:2或3
生成乙個輔助陣列
分治[抽屜原理]
思路2具體細節
將每個數的取值的區間[1, n]劃分成[1, n/2]和[n/2+1, n]兩個子區間,然後分別統計兩個區間中數的個數。(分治,抽屜原理) o(nlogn)
這道題目主要應用了抽屜原理和分治的思想。
抽屜原理:n+1 個蘋果放在 n 個抽屜裡,那麼至少有乙個抽屜中會放兩個蘋果。
用在這個題目中就是,一共有 n+1 個數,每個數的取值範圍是1到n,所以至少會有乙個數出現兩次
左右兩個區間裡一定至少存在乙個區間,區間中數的個數大於區間長度。
依次類推,每次我們可以把區間長度縮小一半,直到區間長度為1時
劍指offer (3)陣列中重複的數字
題目描述 題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。程式 include include include...
劍指offer 3 陣列中重複的數字
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。使用hashset去重 如果新增不成功說明出現了重複的元素 返回。public intfindrepeatnu...
劍指offer 3 陣列中重複的數字
找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 本...