力扣热题100_普通数组_238_除自身以外数组的乘积

文章目录


题目链接

238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]

输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]

输出: [0,0,9,0,0]

提示:

2 <= nums.length <= 105

-30 <= nums[i] <= 30

保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)

解题思路

普通数组

1.初始化res数组,并存储1、p左部分、q右部分

2.循环遍历,循环次数为长度len(nums) - 1,原数组从左往右累乘,记值为p,每次存储在res数组。

3.再次循环遍历,循环次数为长度len(nums) - 1,原数组从右往左累乘,记值为q,与当前res数组索引i-1相乘,并将其结果存储

解题代码

python 复制代码
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        #   从上面的图可以看出,当前位置的结果就是它左部分的乘积再乘以它右部分的乘积。因此需要进行两次遍历,第一次遍历用于求左部分的乘积,第二次遍历在求右部分的乘积的同时,再将最后的计算结果一起求出来。
        res, p, q = [1], 1, 1
        for i in range(len(nums) - 1):
            p *= nums[i]
            res.append(p)
        for i in range(len(nums) - 1, 0, -1):
            q *= nums[i]
            res[i - 1] *= q
        return res
相关推荐
✿ ༺ ོIT技术༻16 分钟前
剑指offer第2版:链表系列
数据结构·算法·链表
yiridancan40 分钟前
终极剖析HashMap:数据结构、哈希冲突与解决方案全解
java·数据结构·算法·哈希算法
满分观察网友z42 分钟前
性能优化大作战:从 O(N*M) 到 O(N),我的哈希表奇遇记(1865. 找出和为指定值的下标对)
算法
点云SLAM3 小时前
二叉树算法详解和C++代码示例
数据结构·c++·算法·红黑树·二叉树算法
今天背单词了吗98010 小时前
算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
笔记·学习·算法·牛顿迭代法
没书读了10 小时前
考研复习-数据结构-第六章-图
数据结构
jdlxx_dongfangxing10 小时前
进制转换算法详解及应用
算法
why技术11 小时前
也是出息了,业务代码里面也用上算法了。
java·后端·算法
future141212 小时前
C#进阶学习日记
数据结构·学习
2501_9228955812 小时前
字符函数和字符串函数(下)- 暴力匹配算法
算法