数据结构与算法之剑指 Offer II 041. 滑动窗口的平均值
原创
©著作权归作者所有:来自51CTO博客作者Three_ST的原创作品,请联系作者获取转载授权,否则将追究法律责任
剑指 Offer II 041. 滑动窗口的平均值
/**
* Initialize your data structure here.
* @param {number} size
*/
var MovingAverage = function(size) {
this.windows = [];
this.size = size;
};
/**
* @param {number} val
* @return {number}
*/
MovingAverage.prototype.next = function(val) {
if(this.windows.length<this.size){
this.windows.push(val)
}else{
this.windows.shift()
this.windows.push(val)
}
let average = this.windows.reduce((prev,next)=>prev+next)/this.windows.length
return average
};
/**
* Your MovingAverage object will be instantiated and called as such:
* var obj = new MovingAverage(size)
* var param_1 = obj.next(val)
*/
执行结果:通过
执行用时:132 ms, 在所有 JavaScript 提交中击败了10.64%的用户
内存消耗:47.6 MB, 在所有 JavaScript 提交中击败了27.73%的用户
通过测试用例:11 / 11
改进方法
/**
* Initialize your data structure here.
* @param {number} size
*/
var MovingAverage = function(size) {
this.windows = [];
this.size = size;
this.sum = 0;
};
/**
* @param {number} val
* @return {number}
*/
MovingAverage.prototype.next = function(val) {
if(this.windows.length<this.size){
this.windows.push(val)
}else{
let temp = this.windows.shift()
this.windows.push(val)
this.sum -= temp
}
this.sum += val;
return this.sum/this.windows.length;
};
/**
* Your MovingAverage object will be instantiated and called as such:
* var obj = new MovingAverage(size)
* var param_1 = obj.next(val)
*/
执行结果:通过
执行用时:108 ms, 在所有 JavaScript 提交中击败了42.30%的用户
内存消耗:47.2 MB, 在所有 JavaScript 提交中击败了68.63%的用户
通过测试用例:11 / 11
参考链接
剑指 Offer II 041. 滑动窗口的平均值
滑动窗口的平均值