zoukankan      html  css  js  c++  java
  • 每日leetcode-数组-238. 除自身以外数组的乘积

    分类:数组-前缀和数组

    题目描述:

    给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

    解题思路1:

    class Solution:
        def productExceptSelf(self, nums: List[int]) -> List[int]:
            length = len(nums)
            # L 和 R 分别表示左右两侧的乘积列表
            L, R = [0] * length, [0] * length
            answer = [0] * length
            
            # 计算左侧的乘积
            # L[i] 为索引 i 左侧所有元素的乘积
            # 对于索引为 '0' 的元素,因为左侧没有元素,所以 L[0] = 1
            L[0] = 1
            for i in range(1,length):
                L[i] = L[i-1] * nums[i-1]
    
            # 计算右侧的乘积
            # R[i] 为索引 i 右侧所有元素的乘积
            # 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1
            R[length-1] = 1
            for i in reversed(range(length-1)):
                R[i] =  nums[i+1] * R[i+1]
            
            # 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积
            for i in range(length):
                answer[i] = L[i]*R[i]
    
            return answer

    时间复杂度:O(N),其中 N指的是数组 nums 的大小。预处理 L 和 R 数组以及最后的遍历计算都是 O(N)的时间复杂度。
    空间复杂度:O(N),其中 N指的是数组 nums 的大小。使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小。

    解题思路2:

    class Solution:
        def productExceptSelf(self, nums: List[int]) -> List[int]:
            length = len(nums)
            answer = [0] * length
    
            # 计算左侧的乘积
            # answer[i] 表示索引 i 左侧所有元素的乘积
            # 因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1
            answer[0] = 1
            for i in range(1,length):
                answer[i] = answer[i-1] * nums[i-1]
    
            # 计算右侧的乘积
            # R 为右侧所有元素的乘积
            # 刚开始右边没有元素,所以 R = 1
            R = 1
            for i in reversed(range(length)):
                # 对于索引 i,左边的乘积为 answer[i],右边的乘积为 R
                answer[i] = answer[i] * R
                # R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上
                R *= nums[i]
            return answer

    时间复杂度:O(N),其中 N指的是数组 nums 的大小。分析与方法一相同。
    空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。

  • 相关阅读:
    kafka 支持发布订阅
    linux 安装 ORACLE JDK 8
    SPRING 集成 KAFKA 发送消息
    安装kafka 集群 步骤
    zookeeper 单机集成部署
    CAS 界面根据不同的域名显示不同的界面
    POSTMAN 数据关联
    Google Code Jam 2014 Round 1B Problem B
    hdu3555
    hdu2089
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14816574.html
Copyright © 2011-2022 走看看