这是一个面试问题:用、和实现一个Set
类。get
put
getRandom
我会考虑以下选项:
- 已排序/未排序的链表:
get
- O(N),put
- O(N),getRandom
- O(N) - 未排序的向量(可调整大小的数组):
get
- O(N),put
- ?,getRandom
- O(1) - 排序向量(可调整大小的数组):
get
- O(logN),put
- ?,getRandom
- O(1) - 哈希表:
get
-O(1),put
-O(1),getRandom
-O(表大小) - 平衡二叉搜索树:
get
- O(logN),put
- O(logN),getRandom
- O(N)
看起来最好的候选人是:
- 哈希表如果
get/put
比getRandom
- 排序向量(可调整大小的数组)如果
getRandom
比get/put
现在我想知道我们是否可以以某种方式组合向量和哈希表来组成一个更好的集合。