跳至主要內容

Mr.He小于 1 分钟

var MedianFinder = function() {
    this.arr = [];
};

/** 
 * @param {number} num
 * @return {void}
 */
MedianFinder.prototype.addNum = function(num) {
    // 修正1:right 应该初始化为 length,代表查找范围是 [0, length)
    let left = 0, right = this.arr.length; 
    
    // 修正2:标准的二分查找模板
    while(left < right){
        // 中点计算修正
        const mid = Math.floor((left + right) / 2);
        
        if(num < this.arr[mid]){
            right = mid;
        } else {
            // 修正3:防止死循环,左边界必须向右移动
            left = mid + 1;
        }
    }
    // left 就是最终应该插入的位置
    this.arr.splice(left, 0, num);
};

/**
 * @return {number}
 */
MedianFinder.prototype.findMedian = function() {
    const len = this.arr.length;
    if(len % 2 === 1){
        return this.arr[Math.floor(len/2)];
    } else {
        return (this.arr[len/2 - 1] + this.arr[len/2]) / 2;
    }
};