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

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

01 题目

  • 实现RandomizedSet 类:

    • RandomizedSet() 初始化 RandomizedSet 对象
    • bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false
    • bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false
    • int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。

    你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1)

    示例:

    输入
    ["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
    [[], [1], [2], [2], [], [1], [2], []]
    输出
    [null, true, false, true, 2, true, false, 2]解释
    RandomizedSet randomizedSet = new RandomizedSet();
    randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。
    randomizedSet.remove(2); // 返回 false ,表示集合中不存在 2 。
    randomizedSet.insert(2); // 向集合中插入 2 。返回 true 。集合现在包含 [1,2] 。
    randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。
    randomizedSet.remove(1); // 从集合中移除 1 ,返回 true 。集合现在包含 [2] 。
    randomizedSet.insert(2); // 2 已在集合中,所以返回 false 。
    randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字,getRandom 总是返回 2 。
    

    提示:

    • -231 <= val <= 231 - 1
    • 最多调用 insertremovegetRandom 函数 2 * ``105
    • 在调用 getRandom 方法时,数据结构中 至少存在一个 元素。

02 知识点

  • 迭代器Iterator

  • 随机数

03 我的题解思路

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.Iterator;class RandomizedSet {
//	类参数setSet<Integer> set;public RandomizedSet() {
//    	初始化set=new HashSet<Integer>();}public boolean insert(int val) {int n=set.size();//记录set原本长度set.add(val);
//    添加数后,利用set不重复的特点,根据长度变化返回if(set.size()==n) {return false;}else {return true;}}public boolean remove(int val) {
//    	删除同添加int n=set.size();set.remove(val);if(set.size()==n) {return false;}else {return true;}}public int getRandom() {int n=set.size();//获取随机值范围Random ran= new Random();int rs=ran.nextInt(n);//生成随机数
//    	获取迭代器并取出随机索引对应的数Iterator<Integer> iterator = set.iterator();for (int i = 0; i < rs; i++) {iterator.next();}return iterator.next();//返回随机数}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android UI:动画:视图动画

文章目录 定义两种创建方式 代码:直接创建Animation对象XML:加载xml文件API 类 动画类 AnimationAlphaAnimationScaleAnimationTranlateAnimationRotateAnimationAnimationSet小结变化速率类 InterpolatorAccelerateInterpolatorDecelerateInterpolatorAccelerateDecelerateI…

acwing算法提高之数据结构--AC自动机

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录AC自动机相关题目。 AC自动机是以Trie的结构为基础&#xff0c;结合KMP的思想建立的自动机&#xff0c;用于解决多模式匹配等任务。 2 训练 题目1&#xff1a;1282搜索关键词 C代码如下&#xff0c; #include <cstdio&g…

STM32 HAL库F103系列之IIC实验

IIC总线协议 IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 总线就是传输数据通道 协议就是传输数据的规则 IIC总线结构图 ① 由时钟线SCL和数据线SDA组成&#xff0c;并且都接上拉电阻…

[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200

题目 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N,接 下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成 本各不相同&#xff0c;且有些节点之间已经存在光纤相连&#…

try-catch-finally的省略与springboot

在 Java 中&#xff0c;try-catch 块是用于捕获和处理异常的结构&#xff0c;它可以帮助您在代码中处理可能发生的异常情况。在某些情况下&#xff0c;您可能希望省略 try-catch 块并将异常向上抛出&#xff0c;让调用者处理异常。这种情况通常适用于以下情况&#xff1a; 方法…

python项目入门新手攻略

最近工作需要接手了代码量比较大的python开发的项目&#xff0c;平时写python不多&#xff0c;记录一下如何熟悉项目。 分析调用流程-pycallgraph 因为代码量比较大&#xff0c;所以希望通过工具生成代码调用流程&#xff0c;因此用到了pycallgraph。 pycallgraph&#xff0…

boost::asio::ip::tcp::acceptor::reuse_address

boost::asio::ip::tcp::acceptor::reuse_address 是一个选项&#xff0c;用于设置 tcp::acceptor 对象是否可以在绑定到一个地址后立即重新使用该地址。 在网络编程中&#xff0c;当服务器程序关闭后&#xff0c;操作系统可能会保留 socket 使用的地址一段时间。在这段时间内&…

【AIGC调研系列】InternVL开源多模态模型与GPT-4V的性能对比

InternVL和GPT-4V都是多模态模型&#xff0c;但它们在性能、参数量以及应用领域上有所不同。 InternVL是一个开源的多模态模型&#xff0c;其参数量为60亿&#xff0c;覆盖了图像/视频分类、检索等关键任务&#xff0c;并在32个视觉-语言基准测试中展现了卓越性能[2]。InternV…

linux操作系统,进入救援模式的方法

准备好操作系统的 ISO 文件 或 刻录好的U盘启动盘 登录服务器 BMC 管理界面&#xff0c;选择镜像之后&#xff0c;点击 “启动媒体”&#xff08;如果使用U盘启动盘 则跳过这一步骤&#xff0c;直接看下一步&#xff09; 重启服务器&#xff0c;开机界面一般按键盘 “Delete”…

数据库管理工具

Heidisql HeidiSQL是一款简洁的图形化的数据库管理工具&#xff0c;支持MySQL、SQLServer、PostgreSQL、SQLite等多种数据库。HeidiSQL提供了一个用于在数据库浏览之间切换 SQL 查询和标签带有语法突出显示的简单易用的界面。其它功能包括BLOB 和 MEMO 编辑&#xff0c;大型SQ…

优雅处理枚举值映射和分页

文章目录 引言I pagehelper分页1.1 pagehelper配置1.2 使用方法1.3 SQLServerException: LIMIT 附近有语法错误。II mybatis-plus2.1 多数据源配置2.2 优雅处理枚举值映射@EnumValue2.3 配置枚举扫描包2.4 常见问题引言 分页效果 优雅处理枚举值映射

docker seata

docker pull seataio/seata-server:1.6.1 数据库脚本&#xff1a; incubator-seata/script/server/db at master apache/incubator-seata GitHub #先启动服务 docker run -d --name seata -p 8091:8091 -p 7091:7091 seataio/seata-server:1.6.1 #将配置文件拷贝出来 …

PotatoPie 4.0 实验教程(34) —— FPGA实现摄像头图像二值化腐蚀效果

链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 图像二值化腐蚀处理有什么作用&#xff1f; 图像二值化腐蚀处理在图像处理中起到了以下作用&#xff1a; 物体分割与提取&#xff1a;在图像二值化之后&#xff0c;通过腐蚀操作可以消除噪声、连接相邻的…

【C语言】动态内存分配

即使行动导致错误&#xff0c;却也带来了学习与成长;不行动则是停滞与萎缩。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;为什么要有动态内存分配 &#x1f34b;知识点二&#xff1a;malloc和free • &#x1…

shell脚本,删除30天以前的日志,并将日志推送到nas,但运行出现/bin/bash^M。

删除30天以前的日志 将日志推送到nas中&#xff0c;然后删除pod中的日志 pod挂载到本地 运行出现/bin/bash^M 1、删除30天以前的日志&#xff1a; #! /bin/bash# 定义源日志目录 LOG_DIR/home/log/ # 删除日志 find $LOG_DIR -type f -name "*.log" -mtime 30 -exec…

持续总结中!2024年面试必问 100 道 Java基础面试题(二十二)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 100 道 Java基础面试题&#xff08;二十一&#xff09;-CSDN博客 四十三、String属于基础的数据类型吗&#xff1f; 在Java中&#xff0c;String不属于基础数据类型&#xff08;也称为原始数据类型或内置数据类型…

2024年五一杯高校数学建模竞赛(C题) 建模解析| 冲击地压危险预测 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过滑动平均法解决冲击地压危险预测问题。实现综合建模。独创复杂系统视角&#xf…

GPU系列(三):如何管理GPU

1 使用nvidia-smi管理你的GPU卡 nvidia-smi命令是NVIDIA系统管理接口&#xff0c;之前提到使用nvidia-docker实际上底层也是调用的该接口。该接口可以查看到当前主机上的相关GPU设备&#xff0c;任务以及当前状态等信息&#xff0c;熟练使用该接口能够更好的管理好GPU系统资源…

在做题中学习(48):朴素的二分查找

. - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a; 暴力求解 for循环中&#xff0c;从nums[0]枚举到nums[n-1]&#xff0c;依次判断&#xff0c;返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二&#xff1a;二分查找 因为此数组为有序的…

Mybatis进阶(动态SQL)

文章目录 1.动态SQL1.基本介绍1.为什么需要动态SQL2.基本说明3.动态SQL常用标签 2.环境搭建1.新建子模块2.删除不必要的两个文件夹3.创建基本结构4.父模块的pom.xml5.jdbc.properties6.mybatis-config.xml7.MyBatisUtils.java8.MonsterMapper.java9.MonsterMapper.xml10.测试Mo…