设计一个数据结构满足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