您的位置:首页 > 理论基础 > 数据结构算法

其他题目---设计RandomPool结构

2017-10-19 17:31 225 查看
【题目】

  设计一种结构,在该结构中有如下三个功能:

   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
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 python