[英]HashMap with O(log(N)) time complexity operations
我對 CodeSignal 進行了測試,但無法解決此問題。
創建一個允許以下操作的數據結構。
插入 xy - 插入帶有鍵 x 和值 y 的 object。
獲取 x - 返回帶有鍵 x 的 object 的值。
addToKey x - 將 x 添加到 map 中的所有鍵
addToValue y - 將 y 添加到 map 中的所有值。
每個操作的時間復雜度應該是 O(log(N))
我能夠在 Java 中使用數組和 LinkedList 制作 hash map。 但是我無法將時間復雜度提高到 O(log(N))。 在我的實現中,插入和獲取的時間復雜度為 O(1)(最壞情況下為 O(N))。 addToKey 和 addToValue 的時間復雜度是 O(N),因為我必須迭代所有元素來修改鍵和值。
對於這個問題,合適的數據結構是什么?
在 The Vee 和 Tom Elias 的有用評論后編輯以更正答案。
您不能通過迭代所有元素來實現addToKey
和addToValue
,因為正如您所意識到的那樣,這需要線性時間。
相反,您可以保留keyDelta
和valueDelta
int
實例變量,它們保存應分別添加到每個鍵和值的值(或所有值的總和)。 這是假設addToKey
和addToValue
應該將數值添加到鍵或值。
addToKey
和addToValue
只需要更新那些實例變量,這需要O(1)
。
get(x)
操作將搜索鍵x - keyDelta
並在向其添加valueDelta
后返回其對應的值。
請注意, add(x,y)
也需要更改,因為添加到 Map 的鍵值對不應受到先前調用addToKey
或addToValue
的影響。 如果insert(x,y)
實際上將x - keyDelta, y - valueDelta
對插入 map,則可以實現這一點。
如果您使用TreeMap
來實現鍵到值的映射,則get
和insert
將占用O(logN)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.