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

  • 相关阅读:
    Android——ListView学习笔记(一)
    记录笔记——关于request.getRequestDispatcher().forward(request, response)的跳转问题
    Python + openCV 实现图像垂直投影和水平投影
    2020年-第三周助教总结-第二组
    Python记录——字符串的常用方法
    2020年-第二周助教总结-第二组
    Android开发——三种活动跳转方式
    2020年-第一周助教总结-第二组
    Python —— 实例化ndarray对象
    海信聚好看矫恒浩:构建异地双活混合云,利用公共云应对流量突增
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14816574.html
Copyright © 2011-2022 走看看