【Leetcode】1352. Product of the Last K Numbers

题目地址:

https://leetcode.com/problems/product-of-the-last-k-numbers/

要求设计一个数据结构,可以实现:
1、添加一个数;
2、求最后添加的 k k k个数的乘积。
题目保证操作 2 2 2只会在添加过至少 k k k个数之后才会调用。

求一个子区间的乘积可以用前缀积来做。这里有个特例需要考虑,即如果添加了 0 0 0进来,事实上此时前缀积列表可以直接清空,并重新开始计算前缀积。在询问的时候,如果发现询问的子区间长度大于了列表长度,说明query区间里有 0 0 0,则直接返回 0 0 0,否则返回区间乘积。代码如下:

import java.util.ArrayList;
import java.util.List;

public class ProductOfNumbers {
    
    private List<Integer> list;
    
    public ProductOfNumbers() {
        list = new ArrayList<>();
        list.add(1);
    }
    
    public void add(int num) {
        int last = list.get(list.size() - 1);
        if (num == 0) {
            list.clear();
            list.add(1);
        } else {
            list.add(num * last);
        }
    }
    
    public int getProduct(int k) {
        int start = list.size() - k;
        if (start <= 0) {
            return 0;
        }
        
        return list.get(list.size() - 1) / list.get(start - 1);
    }
}

所有操作时间复杂度 O ( 1 ) O(1) O(1),空间复杂度看具体数据。

你可能感兴趣的:(LC,栈,队列,串及其他数据结构,列表,java,leetcode)