首页 > 试题广场 >

除自身以外数组的乘积

[编程题]除自身以外数组的乘积
  • 热度指数:2013 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的数组 nums ,返回一个数组 res,res[i]是nums数组中除了nums[i]本身以外其余所有元素的乘积,即:

1.请不要使用除法,并且在 O(n) 时间复杂度内完成此题。
2.题目数据保证res数组的元素都在 32 位整数范围内。
3.有O(1)空间复杂度的做法,返回的res数组不计入空间复杂度计算。

数据范围:
示例1

输入

[1,2,3,4]

输出

[24,12,8,6]

说明

res[0]=2*3*4=24
res[1]=1*3*4=12
res[2]=1*2*4=8
res[3]=1*2*3=6  
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def timesExceptSelf(self , nums: List[int]) -> List[int]:
        # write code here
        dp_l = nums.copy()
        for i in range(1, len(dp_l)):
            dp_l[i] = dp_l[i-1] * nums[i]

        dp_r = nums.copy()
        for i in range(len(dp_r)-1 -1, -1, -1):
            dp_r[i] = dp_r[i + 1] * nums[i]

        res = nums.copy()
        res[0] = dp_r[1]
        res[-1] = dp_l[-2]
        for i in range(1, len(nums)-1):
            res[i] = dp_l[i-1] * dp_r[i + 1]
        return res

发表于 2024-06-03 23:19:17 回复(0)
不超时:
class Solution:
    def timesExceptSelf(self , nums: List[int]) -> List[int]:
        tmp = []
        for i in range(len(nums)):
           tmp.append(1)
        left = 1
        right = 1
        for i in range(len(nums)):
            tmp[i]*=left
            left*= nums[i]
            tmp[len(nums)-1-i] *= right
            right*= nums[len(nums)-1-i]
        return tmp

发表于 2023-06-01 15:57:06 回复(0)