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),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。

  • 相关阅读:
    ORACLE常用SQL(session&badSql)
    归档日志满解决方法
    SPRING MVC总结
    Java中分割字符串
    无废话ExtJs 入门教程二十一[继承:Extend]
    无废话ExtJs 入门教程二十[数据交互:AJAX]
    WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解决办法
    WampServer安装图解教程
    vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装。的解决方法
    WordPress添加网站图标
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14816574.html
Copyright © 2011-2022 走看看