leetcode 1352. 最后 K 个数的乘积python

题目描述:

 题解:

解法1(未通过):

最开始把这个题目想的简单了, 通过list实现,add操作对应list的append操作,productOfNumbers则将list最后k个元素相乘返回乘积。

class ProductOfNumbers(object):

    def __init__(self):
        self.numlist = []


    def add(self, num):
        self.numlist.append(num)


    def getProduct(self, k):
        res = 1
        for i in range(1,k+1):
            if self.numlist[-i]==0:
                return 0
            res = res*self.numlist[-i]
        return res

解法二(通过):

1.ProductOfNumbers中定义三个元素:

prefix为一个列表,prefix[i]表示0-i个元素之积。

zero_idx记录列表中最后一个0的位置,初始化为0

idx记录当前列表中元素数量

2.add操作(同时对prefix进行更新)

<1>如果添加的num为0,则将prefix中该位置之前所有元素之积设为1,zero_idx更新为idx

<2>如果num不为0,如果不是第一次add操作(idx!=0),即prefix和列表均不为空,prefix中该位置之前所有元素之积=prefix[-1]*num。如果是添加的第一个元素(idx==0),则直接将num加入prefix

<3>idx+1

3.getproduct操作(根据prefix)

1.prefix[i]表示列表中第0-i个元素之积,因此列表中后k个元素之积=prefix[-1]/prefix[-k-1]即最后k个数之积=所有树之积/除去这k个数外所有数之积。

2.如果这k个数中有0,则直接返回0。

3.如果k=len(prefix),返回prefix[-1]

参考:LeetCode-Python-1352. 最后 K 个数的乘积 (前缀积 + 数组)_Keep Coding-CSDN博客

class ProductOfNumbers(object):

    def __init__(self):
        self.prefix = []
        self.zero_idx = -1
        self.idx = 0

    def add(self, num):
        if num!=0:
            if self.idx:
                self.prefix.append(self.prefix[-1] * num)
            else:
                self.prefix.append(num)
        else:
            self.zero_idx = self.idx
            self.prefix.append(1)
        self.idx = self.idx+1

    def getProduct(self, k):
        if self.zero_idx>=len(self.prefix)-k:
            return 0
        elif k==self.idx:
            return self.prefix[-1]
        else:
            return self.prefix[-1]/self.prefix[-k-1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值