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

算法练习16——O(1) 时间插入、删除和获取随机元素

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

实现RandomizedSet 类:
RandomizedSet() 初始化 RandomizedSet 对象
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。

哈希表+变长数组

哈希表实现插入和删除的O(1),变长数组实现随机读取的O(1)

Python

class RandomizedSet:def __init__(self):self.nums = []self.indices = {}def insert(self, val: int) -> bool:if val in self.indices:return Falseself.indices[val] = len(self.nums)self.nums.append(val)return Truedef remove(self, val: int) -> bool:if val not in self.indices:return Falseid = self.indices[val]self.nums[id] = self.nums[-1]self.indices[self.nums[id]] = idself.nums.pop()del self.indices[val]return Truedef getRandom(self) -> int:return choice(self.nums)
# 作者:力扣官方题解
# 链接:https://leetcode.cn/problems/insert-delete-getrandom-o1/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Go

type RandomizedSet struct {nums    []intindices map[int]int
}func Constructor() RandomizedSet {return RandomizedSet{[]int{}, map[int]int{}}
}func (rs *RandomizedSet) Insert(val int) bool {if _, ok := rs.indices[val]; ok {return false}rs.indices[val] = len(rs.nums)rs.nums = append(rs.nums, val)return true
}func (rs *RandomizedSet) Remove(val int) bool {id, ok := rs.indices[val]if !ok {return false}last := len(rs.nums) - 1rs.nums[id] = rs.nums[last]rs.indices[rs.nums[id]] = idrs.nums = rs.nums[:last]delete(rs.indices, val)return true
}func (rs *RandomizedSet) GetRandom() int {return rs.nums[rand.Intn(len(rs.nums))]
}// 作者:力扣官方题解
// 链接:https://leetcode.cn/problems/insert-delete-getrandom-o1/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

算法练习16——O(1) 时间插入、删除和获取随机元素

LeetCode 380 O(1) 时间插入、删除和获取随机元素 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象 bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。 …...

实时数据更新与Apollo:探索GraphQL订阅

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

VMware Workstation里面安装ubuntu20.04的流程

文章目录 前言一、获取 desktop ubuntu20.04 安装镜像二、VMware Workstation下安装ubuntu20.041. VMware Workstation 创建一个新的虚拟机2. ubuntu20.04的安装过程3. 登录ubuntu20.044. 移除 ubuntu20.04 安装镜像总结参考资料前言 本文主要介绍如何在PC上的虚拟机(VMware W…...

pnpm的环境安装以及安装成功后无法使用的问题

文章目录 前言1、使用npm 安装2、安装后的注意点3、遇到问题4、配置path的环境变量(1)找到环境变量(2)找到并双击path的系统变量(3)复制第1步中使用npm安装的红框部分的路径(4)将第&…...

华为eNSP配置专题-浮动路由及BFD的配置

文章目录 华为eNSP配置专题-浮动路由及BFD的配置0、参考文档1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接2.2、基本终端配置 3、浮动路由配置3.1、浮动路由的基本配置3.2、浮动路由的负载均衡问题3.3、浮动路由的优先级调整 4、BFD的配置4.1…...

光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出研究

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

面试题-React(十六):理解Redux及其工作原理

在现代前端开发中,状态管理是一个关键的问题。Redux是一个广泛使用的状态管理库,可以帮助开发者更有效地管理应用的状态。 一、什么是Redux? Redux是一个JavaScript状态管理库,用于管理应用中的状态(state&#xff0…...

Crypto(4)NewStarCTF 2023 week2 Crypto Rotate Xor

题目代码: # 导入所需的库和从secret模块加载"flag" from secret import flag from os import urandom from pwn import xor from Cryptodome.Util.number import *# 生成两个随机的 64 位素数,分别存储在变量 k1 和 k2 中 k1 getPrime(64) k2 getPrim…...

小程序-uni-app:将页面(html+css)生成图片/海报/名片,进行下载 保存到手机

一、需要描述 本文实现,uniapp微信小程序,把页面内容保存为图片,并且下载到手机上。 说实话网上找了很多资料,但是效果不理想,直到看了一个开源项目,我知道可以实现了。 本文以开源项目uniapp-wxml-to-can…...

Vue非单文件组件

组件就是用来实现局部特定功能效果的代码集合,为的就是复用编码,简化项目编码,提高运行效率。 组件分为非单文件组件和单文件组件,这里介绍的是非单文件组件。 一、创建组件 创建组件的语法格式如下: const 组件名 …...

批量xls转换为xlsx

import win32com.client as win32 import os# 另存为xlsx的文件路径 xlsx_file r"F:\志丹\1020Excel汇总\成果表备份\xlsx" xls_file r"F:\志丹\1020Excel汇总\成果表备份" for file in os.scandir(xls_file):suffix file.name.split(".")[-1…...

行情分析——加密货币市场大盘走势(10.20)

大饼昨日迅猛上涨,并在今日依然上涨,目前处在蓝色上涨趋势线,上涨趋势依然在。中长线可以考虑过几天止损或者继续持有。目前MACD日线呈现绿色实心5天,预计明后天可能会绿色空心,注意后续空头的到来,注意多单…...

https证书配置(nginx)

HTTPS 是什么 HTTPS 是一种应用层协议,是一种透过计算机网络进行安全通信的传输协议,HTTPS 经由 HTTP 进行通信,但是在 HTTP 的基础上引入了一个加密层,使用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是…...

Go方法特性详解:简单性和高效性的充分体现

一、简介 在软件开发的世界里,理解并掌握编程语言的各种特性是至关重要的。Go(又称Golang)作为一种现代的编程语言,以其简洁的语法和出色的性能吸引了大量的开发者。然而,Go的方法(Methods)这一…...

Cesium Vue(四)— 物体(Entity)的添加与配置

1. 添加标签和广告牌 // 添加文字标签和广告牌var label viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(113.3191, 23.109, 750),label: {text: "广州塔",font: "24px sans-serif",fillColor: Cesium.Color.WHITE,outlineColor: Cesium.…...

洗地机哪个好用?2023年洗地机推荐指南

说到提高家庭幸福生活的家电,洗地机肯定是少不了的,特别对于现在快节奏的生活来说,高效率的解决家务活,而且能够大幅度的提高生活质量。在市场上,消费者面临着选择合适洗地机的难题,因为有各种型号、功能和…...

螺旋矩阵(C++解法)

题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[…...

【Java 进阶篇】深入了解 Bootstrap 栅格系统

在网页开发中,创建响应式的布局是至关重要的,因为不同设备和屏幕尺寸需要不同的布局来呈现内容。Bootstrap 提供了一个强大的栅格系统,使开发者能够轻松创建适应不同屏幕的网页布局。本文将深入介绍 Bootstrap 栅格系统,面向初学者…...

Gradle中的buildScript代码块

PS: 在build script中的task apply plugin: spring-boot 需要 classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE") apply plugin: com.moowork.gulp 需要classpath com.moowork.gradle:gradle-gulp-plugin:0.10 在编写Gradle脚本的时…...

Spring boot 集成 xxl-job

文章目录 xxl-job 简介引入xxl-job依赖配置xxl-job config添加properties文件配置BEAN模式(方法形式)步骤一:执行器项目中,开发Job方法:步骤二:调度中心,新建调度任务 xxl-job 简介 官网:https:…...

【MCP 2026多租户隔离权威指南】:20年架构师亲授7大隔离层级、3类越界风险及零信任配置黄金模板

更多请点击: https://intelliparadigm.com 第一章:MCP 2026多租户隔离的核心演进与设计哲学 MCP 2026(Multi-Tenant Control Plane)代表了云原生控制平面在租户边界治理上的范式跃迁。其设计哲学不再将隔离视为“网络或命名空间的…...

SpringBoot项目从Tomcat迁移到东方通TongWeb7的保姆级避坑指南(含达梦数据库适配)

SpringBoot项目从Tomcat迁移到东方通TongWeb7的完整实战手册(含达梦数据库适配) 在国产化技术栈替代浪潮中,中间件迁移是每个Java开发者必须掌握的技能。最近带队完成了基于若依框架的SpringBoot系统从Tomcat到TongWeb7的完整迁移&#xff0c…...

LFM2-2.6B-GGUF持续集成/持续部署(CI/CD)实践:自动化测试模型更新

LFM2-2.6B-GGUF持续集成/持续部署(CI/CD)实践:自动化测试模型更新 1. 为什么需要CI/CD 在模型开发过程中,我们经常会遇到这样的场景:推理脚本优化了一个小功能,或者模型权重文件更新了版本。传统做法是手…...

Display Driver Uninstaller:彻底解决显卡驱动问题的终极方案

Display Driver Uninstaller:彻底解决显卡驱动问题的终极方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-unins…...

从《孤勇者》到周杰伦:手把手教你用手机App(如完美钢琴)看着简谱弹唱流行歌

从《孤勇者》到周杰伦:零基础用手机App十分钟弹出流行金句 地铁上刷到朋友弹唱《孤勇者》的视频,你是否也心动过三分钟?办公室里听到同事用钢琴App弹出周杰伦前奏,会不会好奇他们怎么做到的?其实只需要一部手机和正确的…...

终极免费音乐解锁工具:Unlock-Music 一键解密各大平台加密音乐

终极免费音乐解锁工具:Unlock-Music 一键解密各大平台加密音乐 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址…...

突破光谱限制:YOLOv11多光谱目标检测的架构革新与实战部署

突破光谱限制:YOLOv11多光谱目标检测的架构革新与实战部署 【免费下载链接】ultralytics Ultralytics YOLO 🚀 项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics 在传统计算机视觉领域,RGB三通道图像已无法满足农业监测…...

CVPR 2023论文里,这5个计算机视觉新方向值得你花时间研究一下

CVPR 2023:计算机视觉五大前沿方向的技术突破与产业机遇 1. 3D生成技术的革命性进展 CVPR 2023见证了3D生成技术从实验室走向产业化的关键转折。不同于传统建模方式,基于神经辐射场(NeRF)的3D生成方案正突破三大技术瓶颈&#xff…...

Nintendo Switch文件处理实战指南:5个高效配置技巧掌握NSC_BUILDER

Nintendo Switch文件处理实战指南:5个高效配置技巧掌握NSC_BUILDER 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerig…...

《QGIS快速入门与应用基础》301:数据预处理(去重、缺失值删除)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...