https://leetcode-cn.com/problems/product-of-the-last-k-numbers/
维护一个前缀积, 要求最后连续几个数的乘积只需后面的前缀积除以之前的前缀积。
注意0的情况,遇到0就清空前缀积。
class ProductOfNumbers {
public:
vector<int> prefix_product;
ProductOfNumbers() {
}
void add(int num) {
if(num==0){
prefix_product.clear();
}
else{
if(prefix_product.size()==0){
prefix_product.push_back(num);
}
else
prefix_product.push_back(prefix_product[prefix_product.size()-1]*num);
printf("%d\n",prefix_product[prefix_product.size()-1]);
}
}
int getProduct(int k) {
if(k>prefix_product.size()){
return 0;
}
if(k==prefix_product.size())
return prefix_product[prefix_product.size()-1];
return prefix_product[prefix_product.size()-1]/prefix_product[prefix_product.size()-1-k];
}
};
/**
* Your ProductOfNumbers object will be instantiated and called as such:
* ProductOfNumbers* obj = new ProductOfNumbers();
* obj->add(num);
* int param_2 = obj->getProduct(k);
*/