一、前言🌟
哈喽,小伙伴们,我是泽南👨🎓。不管你是准备跳槽还是在职苟着,都一起行动起来,顺应这个内卷时代干点该干的事儿👣。所以,赶紧跟着我的步伐卷起来吧⏰,变强从这一刻开始!➕🧈
二、题目介绍🌟
随机产生数字并传递给一个方法。你能否完成这个方法,在每次产生新值时,寻找当前所有值的中间值(中位数)并保存。
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。
例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5
设计一个支持以下两种操作的数据结构:
- void addNum(int num) - 从数据流中添加一个整数到数据结构中。
- double findMedian() - 返回目前所有元素的中位数。
示例 1:
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2
解法一 :优先列表
解题思路:
添加时,按数大小优先级加入队列, 获取中值时,计算中间数
/**
* initialize your data structure here.
*/
var MedianFinder = function() {
this.list=[];
};
/**
* @param {number} num
* @return {void}
*/
MedianFinder.prototype.addNum = function(num) {
for(let i=0;i<this.list.length;i++){
if(this.list[i]>=num){
this.list.splice(i,0,num)
return;
}
}
this.list.push(num);
};
/**
* @return {number}
*/
MedianFinder.prototype.findMedian = function() {
if(this.list.length==0) return 0;
let center=this.list.length/2;
if(center===parseInt(center)){
//偶数
return (this.list[center-1]+this.list[center])/2;
}else{
//奇数
return this.list[parseInt(center)];
}
};
/**
* Your MedianFinder object will be instantiated and called as such:
* var obj = new MedianFinder()
* obj.addNum(num)
* var param_2 = obj.findMedian()
*/
解法二 :push数组,排序
解题思路:
生成一个空的数组队列,增加数字通过push,取值时需排序
/**
* initialize your data structure here.
*/
var MedianFinder = function() {
this.item = []
};
/**
* @param {number} num
* @return {void}
*/
MedianFinder.prototype.addNum = function(num) {
this.item.push(num)
};
/**
* @return {number}
*/
MedianFinder.prototype.findMedian = function() {
(this.item).sort(function(a , b){
return a - b
})
if( (this.item.length) % 2 == 0 ){
return ( (this.item)[ this.item.length / 2 ] + (this.item)[this.item.length / 2 - 1 ] ) / 2
}else{
return (this.item)[ (this.item.length - 1) / 2 ]
}
};
/**
* Your MedianFinder object will be instantiated and called as such:
* var obj = new MedianFinder()
* obj.addNum(num)
* var param_2 = obj.findMedian()
*/
最后🌟:
☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start,
🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。