

方法 : 前缀积
- 我们知道只要某个数为0,那么它前面的那些数就都没有用了,我们直接清理掉就好了。
- 题目中说了K是小于数据长度的,如果维护的前缀积列表长度小于K,那么说明在后K个中出现过的0,因此长度不够K,这种情况下直接返回0就行;
- 否则按照上面的逻辑就可以了,由于要维护乘积,所以列表的第一个元素添加一个1作为辅助元素。
class ProductOfNumbers {
List<Integer> list;
public ProductOfNumbers() {
list = new ArrayList<>();
list.add(1);
}
public void add(int num) {
if (num == 0) {
list = new ArrayList<>();
list.add(1);
} else {
int preProduct = list.get(list.size() - 1);
int curProduct = preProduct * num;
list.add(curProduct);
}
}
public int getProduct(int k) {
if (k > list.size() - 1) {
return 0;
}
int cur = list.get(list.size() - 1);
int pre = list.get(list.size() - 1 - k);
return cur / pre;
}
}