leetcode Day49 剑指专项58-60

85 阅读1分钟

剑指 Offer II 058. 日程表

var MyCalendar = function() {
    this.events=[]
};

/** 
 * @param {number} start 
 * @param {number} end
 * @return {boolean}
 */
MyCalendar.prototype.book = function(start, end) {
    let left = 0;
    let right = this.events.length;
    while (left < right) {
        const mid = Math.floor((left + right) / 2);
        const [e1, e2] = this.events[mid];
        if (start >= e2) {
            left = mid + 1;
        } else if (end <= e1) {
            right = mid;
        } else {
            return false;
        }
    }
    this.events.splice(left, 0, [start, end]);
    return true;
};

剑指 Offer II 059. 数据流的第 K 大数值

var KthLargest = function(k, nums) {
    this.idx=k
    this.arr=[...nums]
};

/** 
 * @param {number} val
 * @return {number}
 */
KthLargest.prototype.add = function(val) {
    this.arr.push(val)
    this.arr.sort((a,b)=>b-a)
    return this.arr[this.idx-1]
}

剑指 Offer II 060. 出现频率最高的 k 个数字

var topKFrequent = function(nums, k) {
    let map=new Map()
    for(let i of nums){
        map.set(i,map.has(i)?map.get(i)+1:1)
    }
    let arr=Array.from(map.entries())
    arr.sort((a,b)=>b[1]-a[1])
    let res=[]
    for(let i=0;i<k;i++){
        res.push(arr[i][0])
    }
    return res
};