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

小咪咪 2022-10-10 06:01 64阅读 0赞

设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。

insert(val):当元素 val 不存在时,向集合中插入该项。
remove(val):元素 val 存在时,从集合中移除该项。
getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。

输入:[“RandomizedSet”,”insert”,”remove”,”insert”,”getRandom”,”remove”,”insert”,”getRandom”]
[[],[1],[2],[2],[],[1],[2],[]]

输出:[null,true,false,true,2,true,false,2]

  1. class RandomizedSet {
  2. Set<Integer> set;
  3. Random random=new Random();
  4. public RandomizedSet() {
  5. set=new HashSet();
  6. }
  7. public boolean insert(int val) {
  8. if(!set.contains(val)){
  9. set.add(val);
  10. return true;
  11. }
  12. return false;
  13. }
  14. public boolean remove(int val) {
  15. if(set.contains(val)){
  16. set.remove(val);
  17. return true;
  18. }
  19. return false;
  20. }
  21. public int getRandom() {
  22. Iterator<Integer> iter=set.iterator();
  23. List<Integer> list=new ArrayList();
  24. while(iter.hasNext()){
  25. list.add(iter.next());
  26. }
  27. return list.get(random.nextInt(list.size()));
  28. }
  29. }

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读