当前位置: 首页 > article >正文

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

380. O(1) 时间插入、删除和获取随机元素 - 力扣(LeetCode)

class RandomizedSet:

    def __init__(self):
        self.data = []  # 存储元素的列表
        self.index_map = {}  # 哈希表,存储元素及其索引    

    def insert(self, val: int) -> bool:
        if val in self.index_map:
            return False
        self.data.append(val)  # 将元素添加到数组末尾
        self.index_map[val] = len(self.data) - 1  # 在哈希表中记录索引
        return True

    def remove(self, val: int) -> bool:
        if val not in self.index_map:
            return False
        # 获取要删除元素的索引
        idx = self.index_map[val]
        last_element = self.data[-1]  # 获取数组的最后一个元素
        # 将最后一个元素移动到要删除元素的位置
        self.data[idx] = last_element
        self.index_map[last_element] = idx
        # 删除数组末尾的元素
        self.data.pop()
        del self.index_map[val]  # 从哈希表中移除该元素
        return True        

    def getRandom(self) -> int:
        return random.choice(self.data)


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


http://www.kler.cn/a/466980.html

相关文章:

  • 你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?
  • 【C++】矩阵转置问题详解与优化
  • 若依修改超级管理员admin的密码
  • 145页PPT智慧矿山整体规划建设方案
  • 让私域用户付费的三个关键要素
  • Scala_【4】流程控制
  • 杂七杂八之基于windows安装jupyterlab
  • 【亚马逊云】如何提升AWS Support 计划支持
  • Set对象和Map对象的区别和用途【JavaScript】
  • 深入探索 SQLite:高级功能解析
  • 自动驾驶控制与规划——Project 5: Lattice Planner
  • 【时时三省】(C语言基础)常见的动态内存错误2
  • 解读 C++23 std::expected 函数式写法
  • 【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound
  • 简易Type-C拉取5V/3A电流电路分享
  • 【动态重建】时间高斯分层的长体积视频
  • Excel使用VLOOKUP时注意绝对引用和相对引用区别
  • 基于Java的超级玛丽游戏的设计与实现【源码+文档+部署讲解】
  • SQLite AND/OR 运算符
  • 【信息系统项目管理师】高分论文:论信息系统项目的风险管理(数字化联合审查管理系统)
  • JVM学习指南(9)-JVM运行时数据区
  • Kotlin 协程基础知识总结六 —— 协程 Flow 的综合应用
  • rocketmq-pull模式-消费重平衡和拉取PullTaskImpl线程
  • ubuntu1604 apt镜像源切换
  • 使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用
  • 计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习