題目描述:
請你實現一個「數字乘積類」ProductOfNumbers,要求支持下述兩種方法:
- 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;
}
}