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

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

实现RandomizedSet 类:

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

字节面试遇到过的题
考虑删除的时候把最后一个数换到当前要删除的位置

class RandomizedSet {vector<int>v;unordered_map<int,int>mp1;
public:RandomizedSet() {v.clear();mp1.clear();}bool insert(int val) {if(mp1.find(val)==mp1.end()){v.push_back(val);mp1[val]=v.size()-1;return true;}return false;}bool remove(int val) {if(mp1.find(val)!=mp1.end()){int end_num=v.back();v.pop_back();int pos=mp1[val];v[pos]=end_num;mp1[end_num]=pos;mp1.erase(val);return true;}return false;}int getRandom() {int pos=rand()%v.size();return v[pos];}
};
http://www.dtcms.com/a/275133.html

相关文章:

  • 深度学习:反向传播算法
  • Google Test 介绍和使用指南
  • 《QtPy:Python与Qt的完美桥梁》
  • STM32 IIC通信(寄存器与hal库实现)
  • 组件杠杠结构
  • 干眼症的预防与治疗
  • 域名锁是什么?有必要安装域名锁吗?
  • 拼数(字符串排序)
  • TransUnet医学图像分割模型
  • PrimeTime (PT Shell) report_timing 报告全字段完整解析
  • 深度对比扣子(Coze) vs n8n
  • halcon 求一个tuple的极值点
  • 上位机知识篇---高效下载安装方法
  • Auto-GPT 简易教程
  • Ant Design ProTable重置函数全解析
  • 【Ubuntu 22.04 ROS2 Humble】没有数字签名。 N: 无法安全地用该源进行更新
  • 47-RK3588 用瑞芯微官方提供recovery进行OTA升级
  • VR协作海外云:跨国企业沉浸式办公解决方案
  • ATAM与效用树:架构评估的核心方法论
  • 喷涂机器人cad【1张】+三维图+设计说明书+降重
  • 【SpringAI】6.向量检索(redis)
  • 【JAVA】面向对象三大特性之继承
  • PICO4 MR开发之外部存储读写
  • 论迹不论心
  • Vue和Element的使用
  • 【跟着PMP学习项目管理】每日一练 - 6
  • 深度学习归一化方法维度参数详解(C/H/W/D完全解析)
  • Linux学习笔记
  • ParaCAD 笔记 png 图纸标注数据集
  • 智能Agent场景实战指南 Day 10:产品经理Agent工作流