028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

LeetCode如何构建乘积数组

小编给大家分享一下LeetCode如何构建乘积数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联专注于宝山企业网站建设,响应式网站设计,成都商城网站开发。宝山网站建设公司,为宝山等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

题目描述

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。

题目样例

示例

题目思考

  1. 如何做到 O(N)时间复杂度?

解决方案

思路
复杂度
代码
class Solution:
    def constructArr(self, a: List[int]) -> List[int]:
        # 从左到右, 再从右向左遍历
        # 维护前缀积数组, 从右向左遍历时只需要维护后缀积即可, 然后乘以前一个前缀积, 其结果即为当前元素的左右元素乘积
        lefts = []
        left = 1
        for x in a:
            left *= x
            lefts.append(left)
        # 这里只需要维护后缀积, 没必要再建立一个后缀积数组
        right = 1
        res = [0] * len(a)
        for i in range(len(a))[::-1]:
            # 注意下标为0时左侧没有元素, 此时左侧部分乘积置为1
            left = lefts[i - 1] if i > 0 else 1
            res[i] = left * right
            # 注意当前元素处理完之后再乘以它, 因为结果是不包含当前元素自身的
            right *= a[i]
        return res

以上是“LeetCode如何构建乘积数组”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


文章名称:LeetCode如何构建乘积数组
文章分享:http://www.tsicrk.com/article/gicpsj.html

其他资讯

让你的专属顾问为你服务

2.4036s