二、最後 K 個數的乘積(Weekly Contest 176)

題目描述:
請你實現一個「數字乘積類」ProductOfNumbers,要求支持下述兩種方法:

  1. add(int num)

將數字 num 添加到當前數字列表的最後面。
2. getProduct(int k)

返回當前數字列表中,最後 k 個數字的乘積。
你可以假設當前列表中始終 至少 包含 k 個數字。
題目數據保證:任何時候,任一連續數字序列的乘積都在 32-bit 整數範圍內,不會溢出。

示例:

輸入:
[“ProductOfNumbers”,“add”,“add”,“add”,“add”,“add”,“getProduct”,“getProduct”,“getProduct”,“add”,“getProduct”]
[[],[3],[0],[2],[5],[4],[2],[3],[4],[8],[2]]

輸出:
[null,null,null,null,null,null,20,40,0,null,32]

解釋:
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); // 返回 20 。最後 2 個數字的乘積是 5 * 4 = 20
productOfNumbers.getProduct(3); // 返回 40 。最後 3 個數字的乘積是 2 * 5 * 4 = 40
productOfNumbers.getProduct(4); // 返回 0 。最後 4 個數字的乘積是 0 * 2 * 5 * 4 = 0
productOfNumbers.add(8); // [3,0,2,5,4,8]
productOfNumbers.getProduct(2); // 返回 32 。最後 2 個數字的乘積是 4 * 8 = 32

提示:

add 和 getProduct 兩種操作加起來總共不會超過 40000 次。
0 <= num <= 100
1 <= k <= 40000

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/product-of-the-last-k-numbers
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

你記錄下最後一個放入0的位置就好:
代碼:

class ProductOfNumbers {
        long sum = 1;
        List<Integer> list = new ArrayList<>();
        int maxindex = 0;
        public ProductOfNumbers() {
        }
        public void add(int num) {
            list.add(num);
            if(num == 0){
                maxindex = list.size();
            }
        }
        public int getProduct(int k) {
            int res = 1;
            if(list.size() - k < maxindex){
                return 0;
            }
            for (int i = 0; i < k; i++) {
                res *= list.get(list.size() - i - 1);
            }
            return res;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章