剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器

98 阅读1分钟

剑指 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]    
};