設計RandomPool結構

2021-10-01 11:14:08 字數 1319 閱讀 9420

題目

請設計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...