1352. Product of the Last K Numbers

Leetcode link

题目简介

本题要求我们实现一个类,这个类有着两个功能:添加数字、计算最后 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)
 */

results matching ""

    No results matching ""