演算法 陣列中重複數字

2021-09-22 18:03:37 字數 1012 閱讀 5491

問題a:

陣列值範圍0~n,找出乙個即可:

位置交換,時間o(n),空間o(1)

問題b:

陣列值範圍0~n,使用輔助空間

二分範圍,時間o(nlogn),空間o(1)

問題c:

陣列值範圍不限

雜湊,時間o(n),空間o(n)

問題d:

陣列值不限,對空間要求嚴格

排序,時間o(nlogn),空間o(1)

絕對優秀的雜湊函式,上百億大小位元表

缺點,找不到如此優秀雜湊函式,且擴充套件不容易

布隆過濾器,容忍一定程度失誤率

k個雜湊函式,m長度位元表,m通常大於n

問題f:

20億個數字中,找出現次數最多的數:

將20億個數,拆分成多個批次處理,每次保留上個批次最多的數字,參與下個批次的計算。

問題g:

40億個非負數,找到未出現過的數:

bitmap方法,乙個位表示對應數字是否出現。

分桶,將40億區間劃分幾個,統計每個桶內的數字,若數字數量小於區間寬度,則一定有未出現數。

問題h:

100億個url找出所有重複url:

雜湊分流,用雜湊函式將所有url分配至不同伺服器,利用雜湊函式特性,不同伺服器url一定不同。

100億個url找重複topk:

雜湊分流後,每個伺服器保持乙個小根堆,然後所有伺服器統一計算,生成唯一乙個k大小的小根堆,這裡可以使用外排序。

問題i:

40億個非負正數中找到出現2次的數:

bitmap,每兩個bit統計乙個數出現的次數。

問題j:

40億個數找中位數:

分桶計數,找到最中間區間,遞迴處理。

問題k:

找陣列中重複次數大於n/k的數:

雜湊,時間o(n*k),空間o(k)

雜湊維護k-1個數(num,times),儲存k-1個不同的數,當第k個不同的數找到時,所有k個數times-1,然後繼續找k個不同的數,遍歷完畢後,雜湊表裡即為所求。

陣列中重複數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...

PHP 演算法 陣列重複數字統計的PHP實現

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。1.雜湊法 2.定義備用陣列,作為雜湊使用,key是原陣列每個元素 ...

陣列中的重複數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1 排序 將陣列排序,然後掃瞄排序後的陣列即可。時間複雜度 o nl...