【Golang】LeetCode 238. 除了自身以外数组的乘积

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

题目描述

思路

我们可以通过建立两个数组,以O(n)O(n)O(n)的时间复杂度来解决这个问题。

具体来说,题目中要求我们求出当前数组当中除了自身以外的乘积,我们可以建立两个数组lmulrmul,分别用于统计除了自身之外左侧数组的乘积与右侧数组的乘积(前缀积与后缀积)。

最后在统计答案时,将两部分乘积进行相乘,即可得到最终的结果。

Golang 题解

go 复制代码
func productExceptSelf(nums []int) []int {
    n := len(nums)
    lmul, rmul := make([]int, n), make([]int, n)

    lmul[0], rmul[n - 1] = 1, 1
    for i := 1; i < n; i ++ {
        lmul[i] = lmul[i - 1] * nums[i - 1]
    }
    for i := n - 2; i >= 0; i -- {
        rmul[i] = rmul[i + 1] * nums[i + 1]
    }

    ans := make([]int, n)
    for i := 0; i < n; i ++ {
        ans[i] = lmul[i] * rmul[i]
    }
    return ans
}

Python 题解

python 复制代码
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        lmul, rmul = [1] * n, [1] * n

        for i in range(1, n):
            lmul[i] = lmul[i - 1] * nums[i - 1]
        for i in range(n - 2, -1, -1):
            rmul[i] = rmul[i + 1] * nums[i + 1]
        
        ans = [1] * n
        for i in range(0, n):
            ans[i] = lmul[i] * rmul[i]
        return ans
相关推荐
Tisfy39 分钟前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
青山木2 小时前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
土司大王2 小时前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode
辰辉创聚3 小时前
禽流感病毒分子基础:表面抗原与内部转录复合体的功能解析
ide·leetcode·rabbitmq·重组血凝素蛋白·甲型流感病毒核蛋白·禽流感单抗
ysu_03144 小时前
08-二叉树遍历:四种方式详解
c语言·数据结构·算法·leetcode
土司大王5 小时前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
土司大王5 小时前
LeetCode hot100——4.寻找两个正序数组的中位数:Java 二分第K小 递归裁剪
java·算法·leetcode
6Hzlia6 小时前
【Classic 150 刷题计划】 LeetCode 123. 买卖股票的最佳时机 III | C++ 状态机动态规划与通用交易拓展
c++·算法·leetcode
All for pursuit.8 小时前
【矩阵-2】240.搜索二维矩阵 II
数据结构·c++·算法·leetcode