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

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

在这里插入图片描述

java 实现

class RandomizedSet {
            //需要hash map,list,random
    private Map<Integer, Integer> map; //存储list中的元素,值和索引
    private List<Integer> list;
    private Random random;

    public RandomizedSet() {
        map = new HashMap<>(); //存储list中的元素,值和索引
        list = new ArrayList<>();
        random = new Random();
    }
    
    public boolean insert(int val) {
        if(map.containsKey(val)) {
            return false;
        }
        map.put(val, list.size());//由于list下标从0开始,所以可以用list.size()作为插入元素的索引下标
        list.add(val);
        return true;
    }
    
    public boolean remove(int val) {
        if(!map.containsKey(val)) {
            return false;
        }
        //根据map获取待删除元素的下标
        int index = map.get(val);

        int LastElement = list.get(list.size() - 1);

        list.set(index, LastElement);//覆盖被删除的元素
        map.put(LastElement, index); //更新hashmap
        list.remove(list.size() - 1);

        map.remove(val);
        
        return true;

    }
    
    public int getRandom() {
        return list.get(random.nextInt(list.size())); // 方法 nextInt(n) 会生成一个范围为 [0, n) 的随机整数
    }
}

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

相关文章:

  • 深入理解 Kali Linux:基础命令与操作技巧
  • 【数据库】大二数据库复习范围 (快速版)帮助你快速复习数据库
  • openeuler24.09 系统无需配置 docker 源即可安装 docker 和 docker-composer
  • springboot437校园悬赏任务平台(论文+源码)_kaic
  • Linux函数栈帧
  • 掌握特征提取:机器学习中的 PCA、t-SNE 和 LDA模型
  • [unity3D] 利用 Button 组件实现鼠标悬停显示文字
  • git 不使用第三方软件解决冲突
  • 小米su7 or 保时捷怎么选?使用 Three 实现 3D 汽车展示平台比比看
  • C语言基础十一:指针变量与数组;数组指针及指针数组
  • 【k8s集群应用】K8S二进制安装大致步骤(简略版)
  • windows免登录linux
  • 前端学习-VUE
  • 探秘 Web3:重塑互联网的新力量
  • 【unity小技巧】unity最全的性能优化方案分享以及如何进行性能测试(2024/11/11更新)
  • 【蓝桥杯每日一题】选数异或——线段树
  • 【linux】shell(38)-数组
  • Micro Sip 配置自己的freeswitch服务器地址
  • SpringBoot如何实现缓存预热?
  • 语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限