插入、删除和随机查询时间复杂度都为O(1)

解题思路:map+list

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;class RandomizedCollection {public static void main(String[] args) {RandomizedCollection s = new RandomizedCollection();s.insert(1);s.remove(1);s.insert(1);System.out.println(s.list);}public Map<Integer,List<Integer>> map = new HashMap<>();public List<Integer> list = new ArrayList<>();/** Initialize your data structure here. */public RandomizedCollection() {}/** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */public boolean insert(int val) {list.add(val);List<Integer> temp = map.get(val);if(temp==null){temp = new ArrayList<>();temp.add(list.size()-1);map.put(val,temp);return true;}else{temp.add(list.size()-1);return false;}}/** Removes a value from the collection. Returns true if the collection contained the specified element. */public boolean remove(int val) {List<Integer> temp = map.get(val);if(temp==null){return false;}int item = temp.remove(0);if(temp.size()==0) {map.remove(val);}if(list.size()-1==item) {list.remove(item);}else {Integer lastItem = list.remove(list.size()-1);//最后一个元素的内容
            list.set(item, lastItem);//对结尾元素的调整temp = map.get(lastItem);temp.remove((Integer)list.size());//这个过程还是比较耗时的
            temp.add(item);}return true; }/** Get a random element from the collection. */public int getRandom() {Random random = new Random();int o = random.nextInt(list.size());return list.get(o);}
}

转载于:https://www.cnblogs.com/erdanyang/p/11506547.html

插入、删除和随机查询时间复杂度都为O(1) leetcode 381相关推荐

  1. 用c++实现一个插入,删除和随机访问都是O(1)的容器(剑指||30)

    要求: 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构: ●insert(val):   当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false . ...

  2. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  3. mybatis动态sql,批量插入,批量删除,模糊查询

    trim可以去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 "where"."set"以及"values(" 等前缀,或者 ...

  4. python Trie树和双数组TRIE树的实现. 拥有3个功能:插入,删除,给前缀智能找到所有能匹配的单词...

    #coding=utf-8 #字典嵌套牛逼,别人写的,这样每一层非常多的东西,搜索就快了,树高26.所以整体搜索一个不关多大的单词表 #还是O(1). ''' Python 字典 setdefault ...

  5. 数据结构(8-3)二叉排序树(查找、插入删除)

    目录 一.基础理论 1.特点: 2.结构: 二.查找 三.插入 四.删除 1.被删除的结点D是叶子结点 2.被删除的结点D仅有一个孩子 2-1.删除结点14(有左无右) 2-2.删除结点 10 (有右 ...

  6. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  7. ArrayList和LinkedList的插入删除性能差距到底有多大

    2019独角兽企业重金招聘Python工程师标准>>> 从算法角度来看,ArrayList是便于做查询的容器,LinkedList适合插入删除.如果在一个LinkedList做查询的 ...

  8. 浅析B树、B+树插入删除操作(附代码实现)

    首先自平衡树是为了解决二叉搜索树在有序数据中退化为链表的问题(即查找时间退化为 O(n) 级别). 自平衡树中,B树.B+树可以说是最简单的,没有旋转.变色等操作.我们可以拿多路平衡查找树和同样是自平 ...

  9. 详细介绍红黑树 性质 定义 插入删除操作

    红黑树 定义 节点是红色或黑色 根结点一定是黑色 所有叶子节点都是黑色(指的是null) 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点) 从任意节点到其每个叶子 ...

  10. 解决Spring data jpa 批量插入/删除(saveAll()/deleteAll())速度慢的问题

    问题描述: 项目中使用到了Spring data jpa技术,调用 JpaRepository.saveAll()/deleteAll()方法对list中的数据进行插入/删除时,发现速度特别慢,数据量 ...

最新文章

  1. 【组队学习】【29期】4. 吃瓜教程——西瓜书+南瓜书
  2. wxWidgets与其他工具库的比较(下)
  3. Golang之轻松化解defer的温柔陷阱
  4. 全球最大的公开人脸数据集 | 清华大学芯翌科技联合发布
  5. python切片语法-Python新手学习基础之数据类型——字符串的切片截取
  6. python培训班有用吗-比起自学Python,参加Python培训班有什么优势?
  7. WebApplication和WebSite有什么区别?我该选择哪个?
  8. python 创建目录_Python虚拟环境的搭建与使用
  9. 将方孔分段的lisp_AutoLisp编写工程地质剖面图小工具
  10. 判断一棵树是否是一颗完全二叉树☆
  11. 质量故事(4)---割草的男孩
  12. loss函数之L1Loss,MSELoss,SmoothL1Loss, HuberLoss
  13. 项目交换通知——PM(李忠)
  14. MODIS数据批量下载
  15. 计算机桌面显示保护眼睛设置,教你把电脑屏幕设置成可以保护眼睛的颜色
  16. k2p openwrt固件_自编译OpenWrt 属于自己的固件
  17. 计算机技术对英语要求高吗,学习计算机专业对英语要求高吗?
  18. 隐忍成大事:春秋五霸楚庄王必成雄主之谜
  19. hdu2545树上战争
  20. java编写水数仙花,【360高手联盟-小仙】【JAVASE编程基础】02-JAVA程序的基本结构和基础语法...

热门文章

  1. Windows创建新账户进行登录
  2. python正式发布的时间_微软Visual Studio Code 1.44正式发布:加入新Python教程、时间轴视图...
  3. 多项式加法c语言编程_到底学哪一门编程语言
  4. 2.2同步访临界区(Synchronizing Access to Critical Section)
  5. [渝粤教育] 四川大学 西方经济学(微观) 参考 资料
  6. 【渝粤教育】国家开放大学2018年秋季 0053-22T移动通信技术与移动通信设备 参考试题
  7. 【渝粤教育】国家开放大学2018年春季 0631-21T动物常见病防治 参考试题
  8. 【渝粤教育】广东开放大学 人类行为与社会环境 形成性考核 (56)
  9. Intel® Math Kernel Library (Intel® MKL)
  10. 基于tetgen对曲面分隔的box区域做限定四面体剖分