const MedianFinder = function () {
this.minHeap.unshift(null);
for (let i = a.length - 1; i >> 1 > 0; i--) {
this.minHeap[i] = a[i >> 1];
this.minHeap[i >> 1] = temp;
this.minHeap.shift(null);
this.maxHeap.unshift(null);
for (let i = a.length - 1; i >> 1 > 0; i--) {
this.maxHeap[i] = a[i >> 1];
this.maxHeap[i >> 1] = temp;
this.maxHeap.shift(null);
MedianFinder.prototype.addNum = function (num) {
if (num >= (this.minHeap[0] || Number.MIN_VALUE)) {
// 使得大顶堆的数量最多大于小顶堆一个, 且一定不小于小顶堆数量
if (this.maxHeap.length > this.minHeap.length + 1) {
this.minHeap.push(this.maxHeap.shift());
if (this.minHeap.length > this.maxHeap.length) {
this.maxHeap.push(this.minHeap.shift());
if (this.maxHeap[0] > this.minHeap[0]) {
const temp = this.maxHeap[0];
this.maxHeap[0] = this.minHeap[0];
MedianFinder.prototype.findMedian = function () {
if ((this.maxHeap.length + this.minHeap.length) % 2 === 0) {
return (this.minHeap[0] + this.maxHeap[0]) / 2;