面试150 除自身以外数组的乘积

思路

首先很容易想到暴力法:创建一个长度为n的结果数组,对于每个数以此下标进行划分,分别计算左右两边的乘积然后进行相乘。但是这个会超时!

因此需要优化,需要用前缀法进行优化。我们分别通过left去维护数组左侧的乘积去更新结果数组,然后在通过right去维护右侧的值的过程中,更新res并最后返回。

python 复制代码
from typing import List

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)                # 数组长度
        res = [1] * n                # 初始化结果数组,每个位置设为1(乘法单位)
        # 第一步:从左到右,计算每个位置左边所有数的乘积
        left = 1                     # 初始左乘积为1
        for i in range(n):
            res[i] = left            # 把左边的乘积放入结果中
            left *= nums[i]         # 更新左乘积,乘上当前nums[i]
           
        # 第二步:从右到左,再乘上右边所有数的乘积
        right = 1                    # 初始右乘积为1
        for i in range(n - 1, -1, -1):  # 从右向左遍历
            res[i] *= right          # 把右边的乘积乘到结果上
            right *= nums[i]         # 更新右乘积,乘上当前nums[i]
           
        return res                   # 返回最终结果
相关推荐
এ᭄画画的北北1 小时前
力扣-283.移动零
算法·leetcode
程序员三藏3 小时前
软件测试之单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
是乐谷5 小时前
阿里招AI产品运营
人工智能·程序人生·面试·职场和发展·产品运营·求职招聘
天天扭码6 小时前
很全面的前端面试题——手写题(上)
前端·javascript·面试
ZzMemory9 小时前
一套通关CSS选择器,玩转元素定位
前端·css·面试
圆心角9 小时前
小米面挂了
前端·面试
墨染点香9 小时前
LeetCode 刷题【31. 下一个排列】
算法·leetcode·职场和发展
wrynhyxa9 小时前
力扣热题100——子串
算法·leetcode·哈希算法
Q741_14710 小时前
优选算法 力扣 611. 有效三角形的个数 双指针降低时间复杂度 贪心策略 C++题解 每日一题
c++·算法·leetcode·贪心·双指针
拉不动的猪11 小时前
回顾 pinia VS vuex
前端·vue.js·面试