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

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

// 定义一个RandomizedSet类,用于实现随机集合的功能
class RandomizedSet {
    // nums列表用于存储集合中的元素
    List<Integer> nums;
    // indices映射用于存储元素值到其在nums列表中的索引的映射
    Map<Integer, Integer> indices;
    // random对象用于生成随机数
    Random random;

    // 构造函数,初始化nums、indices和random
    public RandomizedSet() {
        nums = new ArrayList<Integer>(); // 初始化nums为空列表
        indices = new HashMap<Integer, Integer>(); // 初始化indices为空映射
        random = new Random(); // 初始化random对象
    }
    
    // 插入元素的方法
    public boolean insert(int val) {
        if (indices.containsKey(val)) { // 如果元素已存在,返回false
            return false;
        }
        int index= nums.size(); // 获取当前nums的大小作为新元素的索引
        nums.add(val); // 将元素添加到nums列表末尾
        indices.put(val, index); // 更新indices映射,将元素值映射到其索引
        return true; // 插入成功,返回true
    }
    
    // 删除元素的方法
    public boolean remove(int val) {
        if (!indices.containsKey(val)) { // 如果元素不存在,返回false
            return false;
        }
        int index = indices.get(val); // 获取要删除元素的索引
        int last = nums.get(nums.size() - 1); // 获取nums列表最后一个元素
        nums.set(index, last); // 将最后一个元素放到要删除元素的位置
        indices.put(last, index); // 更新indices映射,将最后一个元素的索引映射到被删除元素的位置
        nums.remove(nums.size() - 1); // 从nums列表中移除最后一个元素
        indices.remove(val); // 从indices映射中移除被删除元素的映射关系
        return true; // 删除成功,返回true
    }
    
    // 获取随机元素的方法
    public int getRandom() {
        int randomIndex = random.nextInt(nums.size()); // 生成一个随机索引
        return nums.get(randomIndex); // 返回对应索引位置的元素
    }
}
 


http://www.mrgr.cn/news/13613.html

相关文章:

  • 【数据结构】优先级队列 — 堆
  • Spark MLlib模型训练—分类算法 Decision tree classifier
  • Amos百度云下载与安装 附图文安装教程
  • 读软件开发安全之道:概念、设计与实施12不受信任的输入
  • StarRocks 巧用 Storage Volume,强大又便捷
  • el-dialog中使用el-uplode滚动条穿模问题
  • 【工作实践】MVEL 2.x语法指南
  • 搜索引擎通过分析网页标题中的关键词来判断内容的相关性
  • 判别分析分类上接贝叶斯决策,下接最小距离分类
  • hyperf json-rpc
  • 3.服务注册_服务发现
  • Qt第十九章 网络编程
  • vim 简易配置
  • Disassembly窗口信息解读
  • 数据结构(Java实现):栈和队列相关练习题题解
  • Ruff :是一个用Rust编写的极快的 Python linter 和代码格式化程序
  • 推荐一款强大的 macOS 剪贴板增强工具:CleanClip
  • 大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
  • src-登陆框的常见测试思路
  • 【leetcode_C++_string】387.字符串中的第一个唯一字符