1.8 面试经典150题 O(1)时间插入删除和获取随机元素

O(1)时间插入删除和获取随机元素

实现RandomizedSet 类:

  • RandomizedSet() 初始化 RandomizedSet 对象
  • bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false
  • bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false
  • int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。

你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)

python 复制代码
class RandomizedSet:

    def __init__(self):
        self.map = {}

    def hasKey(self, val: int) -> bool:
        return val in self.map

    def insert(self, val: int) -> bool:
        if self.hasKey(val): return False
        self.map.update(
            {val: val}
        )
        return True

    def remove(self, val: int) -> bool:
        if not self.hasKey(val): return False
        del self.map[val]
        return True

    def getRandom(self) -> int:
        keys = list(self.map.keys())
        index = int(random.random() * len(keys))
        return keys[index]

# Your RandomizedSet object will be instantiated and called as such:
# obj = RandomizedSet()
# param_1 = obj.insert(val)
# param_2 = obj.remove(val)
# param_3 = obj.getRandom()

考虑使用字典类型解决

相关推荐
Python大数据分析@14 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc15 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder15 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境15 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
半亩码田15 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx19801216 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
Python私教16 小时前
签名 URL 刷新导致审批失效?别急着删掉所有 query
python·安全
牧羊人.33316 小时前
Python 办公自动化从入门到入土|09 数据容器之字典
开发语言·python
Zane199417 小时前
类变量与实例变量:一个共享列表引发的线上事故
后端·python
Python私教17 小时前
一次性批准令牌:挡住旧授权误发新版本的工程设计
python·安全