leetcode每日一题 380. O(1) 时间插入、删除和获取随机元素
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;
}
list.add(val);
map.put(val,list.size()-1);
return true;
}
public boolean remove(int val) {
if(!map.containsKey(val)){
return false;
}
//拿需要删除元素对应下标
Integer index = map.get(val);
//获取list最后一个元素值
Integer lastValue = list.get(list.size() - 1);
//把删除元素对应的下标值修改为list最后一个值
list.set(index,lastValue);
//删除最后一个元素,O(1)时间复杂度
list.remove(list.size()-1);
//设置最后一个值的下标
map.put(lastValue,index);
//从map删除要删除的元素
map.remove(val);
return true;
}
public int getRandom() {
return list.get(new Random().nextInt(list.size()));
}
}
class RandomizedSet {
private Map<Integer, Integer> map;
private int[] arr;
private int index;
private Random random;
public RandomizedSet() {
map = new HashMap<>();
arr = new int[2 * (int) Math.pow(10, 5)];
index = 0;
random = new Random();
}
public boolean insert(int val) {
if (map.containsKey(val)) {
return false;
}
arr[index++] = val;
map.put(val, index - 1);
return true;
}
public boolean remove(int val) {
if (!map.containsKey(val)) {
return false;
}
//拿需要删除元素对应下标
Integer removeIndex = map.get(val);
//获取list最后一个元素值
Integer lastValue = arr[index - 1];
//把删除元素对应的下标值修改为list最后一个值
arr[removeIndex] = lastValue;
//删除最后一个元素,O(1)时间复杂度
index--;
//设置最后一个值的下标
map.put(lastValue, removeIndex);
//从map删除要删除的元素
map.remove(val);
return true;
}
public int getRandom() {
return arr[random.nextInt(index)];
}
}
分类:
leetcode 每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了