我有以下問題,並在我的尖叫聲與哈希的解決方案:如何在一個巨大的數字列表中找到兩個數字,其中xi = xj?
問題:
鑑於巨大的號碼列表,x1........xn
其中xi <= T
,我們想知道是否 或不存在兩個指數i,j
,其中x_i == x_j
。
在O(n)
運行時間中找到算法,並且期望值爲O(n)
。
我此刻解決方案:我們使用散列,我們將使用chaining
有一個映射功能h(x)
。
首先 - 我們建立一個新的數組,我們稱之爲A
,其中每個單元格都是一個鏈表 - 這將是目標數組。
現在我們運行所有n
數字,並使用散列函數將x1........xn
中的每個元素映射到合適的位置。這將需要O(n)
運行時間。
之後我們將在A
上運行,並尋找衝突。如果我們找到一個單元,其中length(A[k]) > 1
然後我們返回xi
和xj
映射到存儲在A[k]
中的值 - 對於最差的情況,總運行時間將是O(n)
,如果兩個數字的映射值(如果它們確實存在)在A
的最後一個單元格中。
哈希還需要'O(n)'空間。這是否允許? (考慮到它是一個巨大的數字列表) – Groo
@Goo:關於這個空間沒有什麼可說的,那麼我想這是不言而喻的。 – ron
是T
wildplasser