380. 时间插入、删除和获取随机元素
分析
-
插入操作:
- 可以使用一个哈希表来存储元素及其索引,这样可以在
O(1)
时间内检查元素是否存在,并在数组末尾插入新元素
- 可以使用一个哈希表来存储元素及其索引,这样可以在
-
删除操作:
- 对于删除操作,不直接从哈希表中删除元素,而是用数组末尾的元素替代被删除的元素。这样可以在
O(1)
时间内移除元素,而不需要移动数组中的其它元素
- 对于删除操作,不直接从哈希表中删除元素,而是用数组末尾的元素替代被删除的元素。这样可以在
-
随机访问操作:
- 使用一个数组来存储所有元素,借助数组的随机访问特性,可以在
O(1)
时间内获取一个随机元素
- 使用一个数组来存储所有元素,借助数组的随机访问特性,可以在
时间复杂度
-
insert(val)
:哈希表的查找和插入操作都是O(1)
,数组的末尾插入也是O(1)
-
remove(val)
:删除操作中的查找、替换和哈希表更新都是O(1)
,数组末尾删除是O(1)
-
getRandom()
:通过rand()
和数组索引的方式随机获取元素是O(1)
空间复杂度
空间复杂度为 O(n)
C++代码
|
|