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()

考虑使用字典类型解决

相关推荐
u0109147603 小时前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python
baidu_340998823 小时前
Golang怎么用go-noescape优化性能_Golang如何使用编译器指令控制逃逸分析行为【进阶】
jvm·数据库·python
m0_678485453 小时前
如何利用虚拟 DOM 实现无痕刷新?基于 VNode 对比的状态保持技巧
jvm·数据库·python
qq_342295823 小时前
CSS如何实现透明背景效果_通过RGBA色彩模式控制透明度
jvm·数据库·python
TechWayfarer3 小时前
知乎/微博的IP属地显示为什么偶尔错误?用IP归属地查询平台自检工具3步验证
网络·python·网络协议·tcp/ip·网络安全
Greyson13 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
justjinji3 小时前
如何批量更新SQL数据表_使用UPDATE JOIN语法提升效率
jvm·数据库·python
小江的记录本3 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
贵沫末3 小时前
python——打包自己的库并安装
开发语言·windows·python
weixin_580614004 小时前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python