1352. Product of the Last K Numbers
Implement the class ProductOfNumbers that supports two methods:
1. add(int num)
Adds the number
numto the back of the current list of numbers.
2. getProduct(int k)
Returns the product of the last
knumbers in the current list.You can assume that always the current list has at least
knumbers.
At any time, the product of any contiguous sequence of numbers will fit into a single 32-bit integer without overflowing.
Example:
Input
["ProductOfNumbers","add","add","add","add","add","getProduct","getProduct","getProduct","add","getProduct"]
[[],[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]
Output
[null,null,null,null,null,null,20,40,0,null,32]
Explanation
ProductOfNumbers productOfNumbers = new ProductOfNumbers();
productOfNumbers.add(3);        // [3]
productOfNumbers.add(0);        // [3,0]
productOfNumbers.add(2);        // [3,0,2]
productOfNumbers.add(5);        // [3,0,2,5]
productOfNumbers.add(4);        // [3,0,2,5,4]
productOfNumbers.getProduct(2); // return 20. The product of the last 2 numbers is 5 * 4 = 20
productOfNumbers.getProduct(3); // return 40. The product of the last 3 numbers is 2 * 5 * 4 = 40
productOfNumbers.getProduct(4); // return 0. The product of the last 4 numbers is 0 * 2 * 5 * 4 = 0
productOfNumbers.add(8);        // [3,0,2,5,4,8]
productOfNumbers.getProduct(2); // return 32. The product of the last 2 numbers is 4 * 8 = 32 Constraints:
There will be at most
40000operations considering bothaddandgetProduct.0 <= num <= 1001 <= k <= 40000
实现两个API: add(num)在末尾添加一个数,productOfNumbers.getProduct(k)返回最近添加的k个元素的积。要求实时返回subarray性质 + 连乘 => presum套路。将乘上每次遇到的新数后把当前乘积存下来,后K个就是res[-1] / res[size - k + 1]。但乘法和加法不同的是遇到0后从后面再往前乘到超过0位置时乘积都会是0,也就是遇到0后要重置res。
class ProductOfNumbers {
public:
    vector<int> nums;
    ProductOfNumbers() {
        nums = {1};
    }
    
    void add(int num) {
        if (num != 0) nums.push_back(nums.back() * num);
        else nums = {1};
    }
    
    int getProduct(int k) {
        return k >= nums.size() ? 0 : nums.back() / nums[nums.size() - k - 1];
    }
};
/**
 * Your ProductOfNumbers object will be instantiated and called as such:
 * ProductOfNumbers* obj = new ProductOfNumbers();
 * obj->add(num);
 * int param_2 = obj->getProduct(k);
 */Last updated
Was this helpful?