劍指offer 3 陣列中重複的數字

2021-10-06 08:37:59 字數 1117 閱讀 2720

[變試]不修改陣列找重複陣列

在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字

n=7

輸出:2或3

陣列中的數字在0~n-1的範圍內

如果沒有重複的數字,當陣列排序後數字 i 應該出現在 index 為 i 的位置

重排陣列

從頭開始掃瞄陣列中的每個數字

if nums[i] != i 

交換 index=i 和 index=nums[i] 陣列內的元素

交換之前判斷是否相等。

輸出:2或3

生成乙個輔助陣列

分治[抽屜原理]

思路2具體細節

(分治,抽屜原理) o(nlogn)

這道題目主要應用了抽屜原理和分治的思想。

抽屜原理:n+1 個蘋果放在 n 個抽屜裡,那麼至少有乙個抽屜中會放兩個蘋果。

用在這個題目中就是,一共有 n+1 個數,每個數的取值範圍是1到n,所以至少會有乙個數出現兩次

將每個數的取值的區間[1, n]劃分成[1, n/2]和[n/2+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 本...