1352. Product of the Last K Numbers
题目简介
本题要求我们实现一个类,这个类有着两个功能:添加数字、计算最后 k 个数字的乘积
解题思路
为了最大化减小计算开销,我们可以额外使用一个数组,来保存每一个数字与前面所有数字的乘积
举个例子,如果题目给的数字是:[1,2,3,4],那么这个数组保存的就是:[1,2,6,24]
这样一来,如果我们要计算后两位的乘积,直接使用 24 / 2 就可以了
但是这个方案还有一个小问题,那就是 0
如果遇到了 0,那么 0 前面的所有乘积都会变成 0,所以在遇到 0 的时候,我们需要将整个保留乘积的数组恢复初始值 [1]
然后我们加一个判断条件,如果当前要求的 k 大于等于当前乘积数组的长度时,直接返回 0,否则就用除法得出答案
Javascript
var ProductOfNumbers = function() {
// 初始值
this.product = [1]
};
/**
* @param {number} num
* @return {void}
*/
ProductOfNumbers.prototype.add = function(num) {
if(num === 0) {
this.product = [1]
} else {
this.product.push(num * this.product[this.product.length - 1])
}
};
/**
* @param {number} k
* @return {number}
*/
ProductOfNumbers.prototype.getProduct = function(k) {
if(k < this.product.length) {
// 这里注意要除的是最后 k+1 位的乘积
return this.product[this.product.length - 1] / this.product[this.product.length - k - 1]
} else {
return 0
}
};
/**
* Your ProductOfNumbers object will be instantiated and called as such:
* var obj = new ProductOfNumbers()
* obj.add(num)
* var param_2 = obj.getProduct(k)
*/