題目
請設計randompool結構,使其具有以下三個功能:
將某個key加入到該結構,做到不重複加入
將原本在結構中的某個key移除。
等概率隨機返回結構中的任意乙個key
要求:以上三個方法的時間複雜度是o(1)的
分析:第乙個方法要求不重複加入以及要求中的時間複雜度為o(1)使得我們聯想到了雜湊表。考慮到第三個問題中要求我們隨機返回乙個key,我們就想到了rand方法以及為每個key都加上乙個index的想法,在不刪除key的情況下,我們好像已經知道怎麼做了,類中維護乙個size變數記錄當前內部元素的個數,然後新增的時候將size++和key作為鍵值對直接加入到雜湊表中,如果是隨機返回我們用rand和size成員得到隨機腳標,然後返回。但是題中要求有刪除功能,對於我們之前的方案來說,如果刪除其中的元素,將會導致表**現洞,進而我們隨機返回乙個key的方法就會出錯。我們的解決辦法是如果我們需要刪除乙個key,那麼我們就將該key對應的鍵值對與雜湊表中最後乙個元素交換key值,那麼就不會在雜湊表**現洞,就可以保證隨機返回乙個key的正確性了
示例**:
#include
#include
#include
#include
#include
#include
using
namespace std;
class
pool
~pool()
void
insertpool
(string key));
this
->indexkeymap.
insert()
;}}void
deletepool
(string key)
} string getrandom()
int randomindex =
(int)(
rand()
%this
->size)
;return
this
->indexkeymap.
at(randomindex);}
private
: mapint> keyindxmap;
map<
int, string> indexkeymap;
int size;};
intmain
(int argc,
char
** ar**)
雜湊 設計RandomPool結構
設計一種結構,在該結構中有如下三個功能 insert key 將某個key加入到該結構,做到不重複加入。delete key 將原本在結構中的某個key移除。getrandom 等概率隨機返回結構中的任何乙個key。要求 insert delete和getrandom方法的時間複雜度都是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...