首页 > 编程语言 >程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素

程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素

时间:2024-05-31 21:31:58浏览次数:17  
标签:面试题 val idx nums -- 编程 int hashmap

关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。
或关注博主免费专栏【程序员宝典--常用代码分享】里面有大量面试涉及的算法或数据结构编程题。

-------------------------------------正文----------------------------------------

实现RandomizedSet 类:

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

-------------------------------------答案----------------------------------------

class RandomizedSet {
private:
    unordered_map<int,int> hashmap;
    int nums[200010];
    int idx;
public:
    RandomizedSet() {
        srand((unsigned)time(NULL));
        idx = -1;
    }
    
    bool insert(int val) {
        if(hashmap.find(val) != hashmap.end()) {
            return false;
        }
        nums[++idx]  = val;
        hashmap[val] = idx;
        return true;
    }
    
    bool remove(int val) {
        if(hashmap.find(val) != hashmap.end()) {
            return false;
        }
        int tail = nums[idx];
        int rm_idx = hashmap[val];
        swap(nums[rm_idx],nums[idx]);

        hashmap.erase(val);
        if(val != tail) hashmap[tail] = rm_idx;
        idx--;
        return true;
    }
    
    int getRandom() {
        int random_i = rand() % (idx+1);
        return nums[random_i];
    }
};

感兴趣的同学辛苦 关注/点赞 ,持续分享逻辑、算法、管理、技术、人工智能相关的文章。

博主其它经典原创:《管理心得--如何高效进行跨部门合作》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》,及
C#实例:SQL如何添加数据》,《C#实战分享--爬虫的基础原理及实现》欢迎大家阅读。

标签:面试题,val,idx,nums,--,编程,int,hashmap
From: https://blog.csdn.net/weixin_60437218/article/details/138282349

相关文章

  • 我的创作纪念日
    ......
  • DHT11温湿度模块的简单使用与代码(江科大代码风格)
    目录模块接线测量范围模块代码DTH11.hDHT11.c模块接线测量范围相对湿度:5%~95%RH温度:-20~60℃模块代码DTH11.h#ifndef_DHT11_H_#define_DHT11_H_#include"stm32f10x.h"//Deviceheader//上电后等待1秒才调用函数......
  • 基于LabVIEW虚拟示波器设计
    随着计算机技术的发展,传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展,标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器,就是在通用的计算机平台上定义和设计仪器的测试功能,使用者操作这台计算机,就......
  • 【C语言】基于C语言实现的贪吃蛇游戏
    【C语言】基于C语言实现的贪吃蛇游戏......
  • 轻松日赚 500+的秘密:高德地图评论赚钱攻略
    你能想象吗?在高德地图上写评论竟然也能赚钱!而且,一条评论就能获得8元左右的收益,高德还会奖励影视会员,这些会员也可以变现。今天,我将教你如何获取高质量的评论,如何无限获取单子,以及如何放大变现,实现轻松日破500+的批量化玩法!首先,让我们来了解一下这个项目的背景。随着移......
  • 数据容器:dict(字典、映射)学会啦!继续学习
    数据容器:dict(字典、映射)1.字典的应用字典可以提供基于Key检索Value的场景实现2.字典的定义my_dict={key:value, key:value,...key:value,}#定义字典my_dict1={"欣欣":100,"嘉嘉":99,"周周":88}#定义空字典my_dict2={}#空集合set()my_dict3=dict(......
  • MySQL基础索引知识【索引创建删除 | MyISAM & InnoDB引擎原理认识】
      博客主页:花果山~程序猿-CSDN博客文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!目录 一,索引用处二,磁盘三,mysql与磁盘的基本交互单位四,管理page的数据结构(InnoDB引擎下)单个page多个pa......
  • 字典课后练习题 多加练习呀!
    info_dict={"王":{"部门":"科技部","工资":3000,"级别":1},"周":{"部门":"市场部","工资":5000,......
  • C++ 习题精选(1)
    这里写目录标题1.字符串相加2.字符串中的第一个唯一字符1.字符串相加题目描述:给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger),也不能直接将输入的字符串转换为整数形式。......
  • 力扣每日一题 5/31
    2965.找出缺失和重复的数字[简单] 题目:给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n*n ,其中的值在 [1,n2] 范围内。除了 a 出现 两次,b 缺失 之外,每个整数都 恰好出现一次 。任务是找出重复的数字a 和缺失的数字 b 。返回一个下标从0开始、长......