面试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                   # 返回最终结果
相关推荐
独自破碎E1 分钟前
【面试真题拆解】Spring事务机制
java·spring·面试
程序员爱钓鱼2 分钟前
Go PDF处理利器: github.com/pdfcpu/pdfcpu 深度指南
后端·面试·go
我是咸鱼不闲呀3 分钟前
力扣Hot100系列21(Java)——[多维动态规划]总结(不同路径,最小路径和,最长回文子串,最长公共子序列, 编辑距离)
java·leetcode·动态规划
sheeta19989 分钟前
LeetCode 每日一题笔记 2025.03.20 3567.子矩阵的最小绝对差
笔记·leetcode·矩阵
软考通9 分钟前
2026年上半年软考报名时间更新,部分地区已截止报名!
职场和发展·职场发展·软考
江湖十年17 分钟前
使用 testing/synctest 测试并发代码
后端·面试·go
FirstFrost --sy30 分钟前
C语言常见概念入门指南
职场和发展·蓝桥杯
旖-旎1 小时前
二分查找(山脉数组的峰顶索引)(5)
c++·算法·leetcode·二分查找·力扣·双指针
独自破碎E1 小时前
【面试真题拆解】5秒内限10次HTTP接口访问,结合数据结构和算法说说你的思路
数据结构·http·面试
感性的程序员小王1 小时前
阿里面试官:说说Agent Skills、MCP、Function Call之间的区别吧?
人工智能·面试