00设计数据结构中等 LeetCode380. O(1) 时间插入、删除和获取随机元素

阅读: 评论:0

00设计数据结构中等 LeetCode380. O(1) 时间插入、删除和获取随机元素

00设计数据结构中等 LeetCode380. O(1) 时间插入、删除和获取随机元素

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

描述

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

分析

哈希不能实现随机访问,借助list实现此功能
难在实现删除O(1), 哈希的值是数值的下标,键是数值。为了实现O(1)删除,将待删除元素与最后一个元素交换,每次都只删最后一个,这样动态数组就不用移动其他元素了。
util.Random
Random r = new Random();
(r.nextInt(list.size()));

class RandomizedSet {public RandomizedSet() {}Map<Integer,Integer> map = new HashMap<>();List<Integer> list = new ArrayList<>();public boolean insert(int val) {ainsKey(val)){return false;}list.add(list.size(),val);map.put(val,list.size()-1);return true;}public boolean remove(int val) {if(!ainsKey(val)){return false;}int index = (val);list.set((list.size()-1));map.(list.size()-1),index);ve(list.size()-1);ve(val);return true;}public int getRandom() {Random r = new Random();(r.nextInt(list.size()));}
}/*** Your RandomizedSet object will be instantiated and called as such:* RandomizedSet obj = new RandomizedSet();* boolean param_1 = obj.insert(val);* boolean param_2 = ve(val);* int param_3 = Random();*/

本文发布于:2024-01-27 21:10:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063610142659.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据结构   元素   时间
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23