设计数据结构O1 insert delete和getRandom

时间:2023-03-08 18:30:16

设计一个数据结构满足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://*.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1