力扣labuladong一刷day26天常数时间访问删除操作数组

力扣labuladong一刷day26天常数时间访问删除操作数组

文章目录

      • 力扣labuladong一刷day26天常数时间访问删除操作数组
      • 一、380. O(1) 时间插入、删除和获取随机元素
      • 二、710. 黑名单中的随机数

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

题目链接:https://leetcode.cn/problems/insert-delete-getrandom-o1/
思路:map可以做到O(1)的插入、删除、获取,但是做不到O(1)的随机获取。list通过索引可以做到O(1)的随机获取。故结合list和map,list存元素,map存元素和索引,添加就尾部添加,删除把该元素与尾部元素交换再删除,这样其他的索引都不影响,也是O(1)的删除,随机获取就是Random然后通过索引获取list。

class RandomizedSet {private Map<Integer, Integer> map;private List<Integer> list;public RandomizedSet() {map = new HashMap<>();list = new ArrayList<>();}public boolean insert(int val) {if (map.containsKey(val)) return false;map.put(val, list.size());list.add(val);return true;}public boolean remove(int val) {if (!map.containsKey(val)) return false;Integer index = map.get(val);Integer value = list.get(list.size() - 1);Collections.swap(list, index, list.size()-1);map.put(value, index);list.remove(list.size()-1);map.remove(val);return true;}public int getRandom() {Random random = new Random();int i = random.nextInt(list.size());return list.get(i);}
}

二、710. 黑名单中的随机数

题目链接:https://leetcode.cn/problems/random-pick-with-blacklist/
思路:这题和上一题类型,区间内有一部分数不可用,需要做一个映射,我们只需要把黑名单里的数对应成N尾部不在黑名单里的数,然后只在n-黑名单数量的范围内随机,如果随机出来的数是黑名单里的数直接返回对应的末尾值即可,就是做了一个映射替换,不过其中有一点要注意,提前给黑名单排个序。

class Solution {Set<Integer> set;Map<Integer, Integer> map;Random random = new Random();int len;public Solution(int n, int[] blacklist) {len = n - blacklist.length;set = new HashSet<>(blacklist.length);Arrays.sort(blacklist);for (int i : blacklist) {set.add(i);}map = new HashMap<>();int right = n-1;for (int i : blacklist) {while (set.contains(right)) right--;map.put(i, right--);}}public int pick() {int i = random.nextInt(len);if (map.containsKey(i)) return map.get(i);else return i;}}

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

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

相关文章

Linux 统计命令Netstat详解

一、查看本机IP连接 netstat -anp netstat常见参数 -a (all)显示所有选项&#xff0c;默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名&#xff0c;能显示数字的全部转化成数字。 -l 仅列出有在 Listen (监听) 的服務状态 -p 显示…

Redis 之 ZSET 实战应用场景,持续更新!

前言 大白话介绍 Redis 五大基本数据类型之一的 ZSET 开发中常见的应用场景 ZSET 介绍 ZSET 与 SET 相同点&#xff1a;都是是 String类型元素的集合&#xff0c;且不允许重复的成员ZSET 与 SET 不同点&#xff1a;ZSET 每个元素都会关联一个 Double 类型的分数&#xff0c;Re…

Latex去掉参考文献后面的参考文献所在页(去掉参考文献的反向超链接)

如下&#xff1a; 在使用latex插入参考文献的时候&#xff0c;最后面总是会出现这种代号。这是表明的是这条参考文献所在的页码&#xff0c;并且点击之后可以跳转到该页。正式来讲&#xff0c;这个叫超链接的BACKREF。若要去掉&#xff0c;只需要在引用hyperref的时候去掉page…

技术or管理?浅谈软件测试人员的未来职业发展,值得借鉴

我们在工作了一段时间之后&#xff0c;势必会感觉到自己已经积累了一些工作经验了&#xff0c;会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的&#xff0c;由于其入门门槛不高&#xff0c;不用学习太多技术性知识即可入行&#xff0c;所…

Net8 EFCore Mysql 连接

一、安装插件 Pomelo.EntityFrameworkCore.MySq (这里要选8.0.0以上版本低版本不支持.net8) 二、配置数据库连接串 appsettings.json 中配置数据库连接串 "ConnectionStrings": {"Connection": "server172.18.2.183;port3306;databasestudents;uid…

webpack打包体积优化,减少白屏时间

webpack打包体积优化 加载慢原因分析及解决 一个是打包体积的优化&#xff0c;另一个是代码层面的优化 1》首先通过Network面板发现vendor.js体积过大&#xff0c;网路良好情况下加载时间太长&#xff09;&#xff0c;vendor体积太大&#xff0c;加载花了3s&#xff1f;后来…

使用opencv将8位图像raw数据转成bmp文件的方法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 这里说的图像raw数据是只包含图像数据的缓存。主要使用了cv::imencode接口将 cv::Mat转化为图像缓存。 #include <opencv2/opencv.hpp>/* 生成一幅…

【若依框架实现上传文件组件】

若依框架中只有个人中心有上传图片组件&#xff0c;但是这个组件不适用于el-dialog中的el-form表单页面 于是通过elementui重新写了一个上传组件&#xff0c;如图是实现效果 vue代码 <el-dialog :title"title" v-model"find" width"600px"…

Pytorch进阶教学——训练一个图像分类模型(GPU)

目录 1、前言 2、数据集介绍 3、获取数据 4、创建网络 5、训练模型 6、测试模型 6.1、测试整个模型准确率 6.2、测试单张图片 1、前言 编写一个可以分类蚂蚁和蜜蜂图片的模型&#xff0c;使用数据集对卷积神经网络进行训练。训练后的模型可以对蚂蚁或蜜蜂的图片进行…

【广州华锐互动】VR沉浸式体验铝厂安全事故让伤害教育更加深刻

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为我们的生活带来了前所未有的便捷和体验。在安全生产领域&#xff0c;VR技术的应用也日益受到重视。 VR公司广州华锐互动就开发了多款VR安全事故体验系统&#xff0c…

蓝桥杯-03-蓝桥杯学习计划

蓝桥杯-03-蓝桥杯学习计划 参考资料 相关文献 报了蓝桥杯比赛&#xff0c;几乎零基础&#xff0c;如何准备&#xff0c;请大牛指导一下。谢谢&#xff1f; 蓝桥杯2022各组真题汇总(完整可评测) 基础学习 C语言网 ACM竞赛入门,蓝桥杯竞赛指南 廖雪峰的官方官网 算法题单 洛谷…

vue,nvue,uniapp,到底是什么

vue,nvue,uniapp,到底是什么&#xff1f; 发展猜想&#xff1a; 开发移动端软件&#xff0c;一般是控件逻辑&#xff0c;可拖动控件android studio都给你设计好了。 开发web页面时&#xff0c;用vue&#xff0c;vue是前端框架。主要是终端设备通过浏览器进行访问&#xff08…

openGL 三:矩阵和向量

1.使用glm数学库进行矩阵和向量的计算 2.位置坐标可以看做一个向量 3.向量的移动&#xff0c;缩放&#xff0c;旋转&#xff0c;都是可以通过和矩阵的计算得出 4.向量的缩放乘一个44的矩阵 5.注意事项&#xff08;有些版本的glm::mat4 不是默认构建一个单位44的矩阵&#xff09…

Java面试题(每天10题)-------连载(39)

目录 Mysql篇 1、数据库的三范式是什么&#xff1f; 2、有哪些数据库优化方面的经验&#xff1f; 3、简述常用的索引有哪些种类&#xff1f; 4、在Mysql数据库中索引的工作机制是什么&#xff1f; 5、Mysql的基础操作命令 6、Mysql的复制器原理以及流程 7、Mysql支持那…

ubuntu20.04使用LIO-SAM对热室空间进行重建

一、安装LIO-SAM 1.环境配置 默认已经安装过ros sudo apt-get install -y ros-Noetic-navigation sudo apt-get install -y ros-Noetic-robot-localization sudo apt-get install -y ros-Noetic-robot-state-publisher 安装 gtsam(如果是18.04的ubuntu直接按照官网配置&…

C++ 基础篇

目录 C开发概述 C特点 C跨平台的原因 C编译器 C库 操作系统API C基本概念 注释 变量 常量 两种定义常量方式的区别 表示符命名规则 常见的关键字 数据类型 整型 浮点数 字符型 转义字符 字符串型 布尔类型 运算符 算术运算符 赋值运算符 比较运算符 逻…

【VScode】超详细图片讲解下载安装、环境配置、编译执行、调试

这里是目录 VScode是什么&#xff1f;VScode的下载和安装环境介绍安装中文插件 配置VScodeC/C开发环境下载和配置MinGW-w64 编译器套件下载&#xff1a;配置&#xff1a; 安装C/C插件在VScode上编写代码设置C/C编译选项创建执行任务编译执行如果想写其他代码在同一个文件夹在不…

js检测是否时虚拟机

//检测detectVM: function () {var userAgent navigator.userAgent;var hardwareConcurrency navigator.hardwareConcurrency || 1;var maxTouchPoints navigator.maxTouchPoints || 0;// 增加更多的虚拟机标识符if (userAgent.includes(VirtualBox) || userAgent.includes(…

springboot 整合 Spring Security 中篇(RBAC权限控制)

1.先了解RBAC 是什么 RBAC(Role-Based Access control) &#xff0c;也就是基于角色的权限分配解决方案 2.数据库读取用户信息和授权信息 1.上篇用户名好授权等信息都是从内存读取实际情况都是从数据库获取&#xff1b; 主要设计两个类 UserDetails和UserDetailsService 看下…

新媒体营销模拟实训室解决方案

一、引言 随着互联网的发展&#xff0c;新媒体已成为企业进行营销和品牌推广的重要渠道。然而&#xff0c;对于许多企业来说&#xff0c;如何在新媒体上进行有效的营销仍是一大挑战。为了解决这个问题&#xff0c;我们推出了一款新媒体营销模拟实训室解决方案&#xff0c;以帮…