设计数据结构O1 insert delete和getRandom
设计一个数据结构满足O(1)的insert, delete和getRandom。这个是从地里Amazon的面经中看到的。
我们可以使用一个resizable数组arr以及一个HashMap来完成。
insert(value): 将value加入到数组中,然后将<value, index> pair放到hashmap里
delete(value): 交换value和数组末端元素交换,从hashmap里去除掉value,然后减少当前数组的长度count。
getRandom():先用Math.random()得到一个0 - count的随机数r,然后直接返回数组里的值arr[r]
这里的O(1)应该指的是average time。怎么处理重复的key是个小问题,可能要用一个set或者LinkedList来存储相同value的不同index,跟HashMap遇到collision的解决方法一样。
Reference:
http://www.geeksforgeeks.org/design-a-data-structure-that-supports-insert-delete-search-and-getrandom-in-constant-time/
http://puzzlersworld.com/interview-questions/ds-with-insert-delete-and-getrandomelement-in-o1/
http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1
设计数据结构O1 insert delete和getRandom的更多相关文章
- LeetCode 380. Insert Delete GetRandom O(1)
		380. Insert Delete GetRandom O(1) Add to List Description Submission Solutions Total Accepted: 21771 ... 
- [LeetCode] 380. Insert Delete GetRandom O(1) 插入删除获得随机数O(1)时间
		Design a data structure that supports all following operations in average O(1) time. insert(val): In ... 
- 【LeetCode】380. Insert Delete GetRandom O(1) 解题报告(Python)
		[LeetCode]380. Insert Delete GetRandom O(1) 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxu ... 
- [Swift]LeetCode380. 常数时间插入、删除和获取随机元素 | Insert Delete GetRandom O(1)
		Design a data structure that supports all following operations in averageO(1) time. insert(val): Ins ... 
- [LeetCode] Insert Delete GetRandom O(1) - Duplicates allowed 常数时间内插入删除和获得随机数 - 允许重复
		Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ... 
- [LeetCode] Insert Delete GetRandom O(1) 常数时间内插入删除和获得随机数
		Design a data structure that supports all following operations in average O(1) time. insert(val): In ... 
- 381. Insert Delete GetRandom O(1) - Duplicates allowed
		Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ... 
- [LeetCode] 381. Insert Delete GetRandom O(1) - Duplicates allowed 常数时间内插入删除和获得随机数 - 允许重复
		Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ... 
- [LeetCode] 380. Insert Delete GetRandom O(1) 常数时间内插入删除和获得随机数
		Design a data structure that supports all following operations in average O(1) time. insert(val): In ... 
随机推荐
- 微软职位内部推荐-Software Engineer II-News
			微软近期Open的职位: News is a critical areas for integration of mobile and services, one of the top priorit ... 
- 如何解决读取到文件末尾时碰到EOF导致的重复输出或者无用输出
			当读取到文件末尾时,会碰到EOF,如何解决呢? 方法一:我们可以通过(ch=fin.get())!=EOF来结束读取,这样就不会像eof()那样碰到EOF之后,还会再进行一次读取,导致输出一个无 ... 
- Ubuntu14.04搭建LAMP环境
			安装Apache2 sudo apt-get install apache2 ... 
- linux查看端口是否已开启和查看文件数
			查看端口是否开启 lsof -i:80 查看文件数 ls | wc -w 
- nodejs笔记一--模块,全局process对象;
			一.os模块可提供操作系统的一些基本信息,它的一些常用方法如下: var os = require("os"); var result = os.platform(); //查看操 ... 
- Surface Pro 3 扩展坞体验
			Surface Pro 3 的确是Microsoft的诚意之作,虽然价格不便宜,但值得入手. 买完Surface Pro 3 后,没事在某网站上闲逛,这货(扩展坞)映入我的眼帘,看完后,心想,这货必须 ... 
- Phpstorm开发记
			Phpsotrm虽然付费项目,但网上有免费的激活码,也可以免费用不是. 1.首先是svn,windows项目下用Phpsotrm需要安装svn时,支付svn命令的,否则会提示找不到svn命令.2.建项 ... 
- JAVA敏捷开发环境搭建(转载)
			前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样 ... 
- 【Asp.Net WebFrom】分页
			Asp.Net WebForm 分页 一. 前言 Asp.Net WebForm 内置的DataPager让人十分蛋疼 本文使用的分页控件是第三方分页控件 AspNetPager,下载地址: 链接: ... 
- jquery ajax清除缓存的方法
			function cityListChange(cityCode){ //{lon=121.491121, name=上海, province=上海市, telPrefix=021, province ... 
