代码实现如下:
难点是 建立一个有序的数组,当数组有值时候,如果数组中最小值大于等于新增值
,则插入最前面,如果数组中最大值小于等于新增值,则插入到最后面。
其他情况就是插入已知数组中间了,于是遍历数组,arr[i] <= num && arr[i+1] && arr[i+1] >= num 满足条件了,则直接插入符合条件的所在位置即可
var MedianFinder = function() {
this.arr = []
};
MedianFinder.prototype.addNum = function(num) {
var arr = this.arr
if(arr.length>0){
if(arr[0] >= num){
arr.unshift(num)
return
}
if(arr[arr.length-1] <= num){
arr.push(num)
return
}
for(var i=0;i<arr.length;i++){
if(arr[i] <= num && arr[i+1] && arr[i+1] >= num){
arr.splice(i+1,0,num)
return
}
}
}else{
arr.push(num)
}
};
MedianFinder.prototype.findMedian = function() {
var arr = this.arr
console.log(arr);
var ou = arr.length % 2 == 0
var i = arr.length >> 1
if(ou){
return (arr[i-1] + arr[i]) / 2
}else{
return arr[i]
}
};
调试 新增下面代码
var m = new MedianFinder()
m.addNum(6)
console.log(m.findMedian(),6);
m.addNum(10)
console.log(m.findMedian(),8);
m.addNum(2)
console.log(m.findMedian(),6);
m.addNum(6)
console.log(m.findMedian(),6);
m.addNum(5)
console.log(m.findMedian(),6);
m.addNum(0)
console.log(m.findMedian(),5.5);
m.addNum(6)
console.log(m.findMedian(),6);
m.addNum(3)
console.log(m.findMedian(),5.5);
m.addNum(1)
console.log(m.findMedian(),5);
m.addNum(0)
console.log(m.findMedian(),4);
m.addNum(0)
console.log(m.findMedian(),3);