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

实现RandomizedSet 类:

RandomizedSet() 初始化 RandomizedSet 对象

bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。

bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。

int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。

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

字节面试遇到过的题

考虑删除的时候把最后一个数换到当前要删除的位置

cpp 复制代码
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];
    }
};
相关推荐
xxxxxxllllllshi11 小时前
Java 集合框架全解析:从数据结构到源码实战
java·开发语言·数据结构·面试
Q741_14711 小时前
C++ 位运算 高频面试考点 力扣137. 只出现一次的数字 II 题解 每日一题
c++·算法·leetcode·面试·位运算
天特肿瘤电场研究所11 小时前
专业的肿瘤电场疗法厂家
算法
DASXSDW12 小时前
NET性能优化-使用RecyclableBuffer取代RecyclableMemoryStream
java·算法·性能优化
kfepiza12 小时前
CAS (Compare and Swap) 笔记251007
java·算法
墨染点香12 小时前
LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
算法·leetcode·职场和发展
啊我不会诶12 小时前
23ICPC澳门站补题
算法·深度优先·图论
Brookty13 小时前
【算法】二分查找(一)朴素二分
java·学习·算法·leetcode·二分查找
黑色的山岗在沉睡14 小时前
LeetCode 2761. 和等于目标值的质数对
算法·leetcode·职场和发展
bawangtianzun14 小时前
重链剖分 学习记录
数据结构·c++·学习·算法