今日题目
https://leetcode.com/problems/product-of-the-last-k-numbers/description/
思路
- 情况一:流中没有 0: 此时直接用前缀乘积即可满足题目要求。
- 情况二:流中存在 0: 那结果必然是 0!
因此,我们只需判断最后 k 个数中是否包含 0。若包含,直接返回 0。
解法
- 用数组维护乘法前缀积。
- 检查最后 k 个数中是否出现过 0。
复杂度
-
时间复杂度:$O(Q)$,Q 为操作次数。
-
空间复杂度:$O(Q)$,Q 为操作次数。
代码
class ProductOfNumbers:
def __init__(self):
self.q = []
self.mul = 1
def add(self, num: int) -> None:
self.mul *= num
self.q.append(self.mul)
if num == 0:
self.q = []
self.mul = 1
def getProduct(self, k: int) -> int:
if k > len(self.q):
return 0
if k == len(self.q):
return self.mul
return self.mul // self.q[-k - 1]
# Your ProductOfNumbers object will be instantiated and called as such:
# obj = ProductOfNumbers()
# obj.add(num)
# param_2 = obj.getProduct(k)
