問題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...