力扣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); // 返回对应索引位置的元素

}

}

相关推荐
Theodore_102236 分钟前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou1 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
冰帝海岸2 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象2 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了3 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·3 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic3 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王3 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康3 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神4 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式