列表

详情


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]

 

提示:

 

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

相似题目

接雨水

乘积最大子数组

粉刷房子 II

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { } };

golang 解法, 执行用时: 32 ms, 内存消耗: 7.6 MB, 提交时间: 2020-11-06 16:47:27

func productExceptSelf(nums []int) []int {
    length, R := len(nums), 1
    ans := make([]int, length)
    ans[0] = 1
    for i:=1;i<length;i++ {
        ans[i] = ans[i-1] * nums[i-1]
    }
    for i:=length-2;i>-1;i-- {
        ans[i] *= R * nums[i+1]
        R *= nums[i+1]
    }
    return ans

}

python3 解法, 执行用时: 80 ms, 内存消耗: 18.1 MB, 提交时间: 2020-11-06 16:39:12

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]: 
        length = len(nums)
        ans = [0]*length

        ans[0] = 1
        for i in range(1, length):
            ans[i] = ans[i-1] * nums[i-1]

        R = 1
        for i in range(length-2, -1, -1):
            ans[i] *= R * nums[i+1]
            R *= nums[i+1]

        return ans

python3 解法, 执行用时: 88 ms, 内存消耗: 19.3 MB, 提交时间: 2020-11-06 16:35:41

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]: 
        length = len(nums)
        L, R, ans = [0]*length, [0]*length, [0]*length
        L[0] = R[length-1] = 1
        for i in range(1, length):
            L[i] = L[i-1] * nums[i-1]
        for i in range(length-2, -1, -1):
            R[i] = R[i+1] * nums[i+1]

        for i in range(0, length):
            ans[i] = L[i] * R[i]
        return ans

上一题