其他題目 設計RandomPool結構

2021-08-09 13:21:44 字數 1292 閱讀 8717

【題目】

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

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

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

3、getrandom():等概率隨機返回結構中的任意乙個key

要求所有的操作時間複雜度都是o(1)。

【基本思路】

對每個元素都加上乙個下標,第乙個元素的下標為0,每加入乙個元素,對應的下標加1。如果要刪除乙個元素,假設該元素的下標為i,將最後的乙個元素放到位置i處,同時刪除最後乙個元素(對應的下標也刪除)。這樣處理就保證了下標的連續性,在進行getrandom操作的時候,只需要隨機產生乙個下標,將該下標位置處的元素返回即可。

為了得到key -> index以及index -> key的對應關係,使用兩個雜湊表來建立兩者之間的對映。

【**實現】

#python3.5

class pool:

def __init__(self):

self.keyindexmap = {}

self.indexkeymap = {}

self.index = 0

def insert(self, key):

self.keyindexmap[key] = self.index

self.indexkeymap[self.index] = key

self.index += 1

def delete(self, key):

if key in self.keyindexmap:

index = self.keyindexmap[key]

lastkey = self.indexkeymap[self.index-1]

self.indexkeymap[index] = lastkey

self.keyindexmap[lastkey] = index

del self.keyindexmap[lastkey]

del self.indexkeymap[self.index-1]

self.index -= 1

def getrandom(self):

if self.index == 0:

return none

index = int(random.random() * self.index)

return self.indexkeymap[index]

其他題目記錄

當乙個數為2的n 次方時,整個二進位制數,只有本位是1 其他位為0,如果我們給這個數減一,那麼本位變為0 其他位全部變成1 我們可以通過 運算,如果為0即為2的n次方 def is2n self,n if n 0 return true res n n 1 return res 0或者直接通過 re...

LeetCode 其他題目記錄

104.maximum depth of binary tree 和111很像,只是遞迴的結構略有不同,可簡單畫圖分析,求最大深度可以直接返回1 max 左子樹深度,右子樹深度 但是求最小深度時不可以,需要分別考慮左右子樹為空的情況。可以舉個反例子,比如,單斜樹。1 class solution 7...

其他題目 設計有setAll功能的雜湊表

題目 雜湊表常見的三個操作是put get和containskey,而且這三個操作的時間複雜度為o 1 現在想加乙個setall功能,就是把所有的記錄的value值都設成統一的值。請設計並實現這種有setall功能的雜湊表,並且put get containskey和setall四個操作的時間複雜度...