剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器
设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构:
- insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false。
- remove(val):当元素 val 存在时返回 true ,并从集合中移除该项,否则返回 false 。
- getRandom:随机返回现有集合中的一项。每个元素应该有 相同的概率 被返回。
var RandomizedSet = function() {
this.arr = []
};
RandomizedSet.prototype.insert = function(val) {
var flag = this.arr.includes(val)
if(flag){
return false
}else{
this.arr.push(val)
return true
}
};
RandomizedSet.prototype.remove = function(val) {
var index = this.arr.indexOf(val)
if(index == -1){
return false
}else{
this.arr.splice(index,1)
return true
}
};
RandomizedSet.prototype.getRandom = function() {
var len = this.arr.length
var num = Math.random() //[0,1)
var range = len * num >> 0 // [0,len - 1]
return this.arr[range]
};