雜湊 設計RandomPool結構

2022-08-10 08:21:08 字數 1204 閱讀 7581

設計一種結構, 在該結構中有如下三個功能:

insert(key): 將某個key加入到該結構, 做到不重複加入。

delete(key): 將原本在結構中的某個key移除。

getrandom():等概率隨機返回結構中的任何乙個key。

【要求】 insert、 delete和getrandom方法的時間複雜度都是o(1)

解:使用兩個hash表進行操作,

map1中存放的 key value 分別是 相應的值  和對應的插入順序

map2中正好相反, key value 分別是 對應的插入順序,和 相應的值

insert(key):即是上面的操作方法

getrandom():就是利用size,使用math.random() * size產生乙個隨機數,範圍就是[0, size )的乙個值,然後從map2中獲取相應的數字對應的值即可

delete(key):需要注意的是,如果直接在map1和map2中進行刪除操作的話,會產生很多空缺的地方,此時,如果getrandom()的話,產生的隨機數的位置很可能是空的,這樣就不能保證o(1)的時間複雜度

正確的做法是:(將最後乙個覆蓋到相應的刪除位置)若刪除的是其中位置x處的值,則把map1中倒數第乙個value賦為刪除處的value(即為插入元素的次序),把map2中應該刪除的次序的位置的value也賦成倒數第乙個的值

並且刪除對應位置上的

public class randompool 

public void insert(string str)

}public string getrandom()

int randomindex = (int) (math.random() * size);

system.out.println(randomindex);

return indexkeymap.get(randomindex);

}public void delete(string str)

}public void printkeyindexmap()

}public void printindexkeymap()

}public static void main(string args)

}

設計RandomPool結構

題目 請設計randompool結構,使其具有以下三個功能 將某個key加入到該結構,做到不重複加入 將原本在結構中的某個key移除。等概率隨機返回結構中的任意乙個key 要求 以上三個方法的時間複雜度是o 1 的 分析 第乙個方法要求不重複加入以及要求中的時間複雜度為o 1 使得我們聯想到了雜湊表...

其他題目 設計RandomPool結構

題目 設計一種結構,在該結構中有如下三個功能 1 insert key 將某個key加入到該結構,做到不重複加入 2 delete key 將原本在結構中的某個key移除 3 getrandom 等概率隨機返回結構中的任意乙個key 要求所有的操作時間複雜度都是o 1 基本思路 對每個元素都加上乙個...

RandomPool結構設計(C )

題目 設計一種結構,在該結構中有如下三個功能 insert key 將某個key加入到該結構,做到不重複加入。delete key 將原本在結構中的某個key移除。getrandom 等概率隨機返回結構中的任何乙個key。要求 insert delete和getrandom方法的時間複雜度都是o 1...