【leetcode100】除自身以外数组的乘积

1、题目描述

给你一个整数数组 nums,返回数组answer,其中 answer[i]等于nums中除nums[i]之外其余各元素的乘积 。

数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。

请不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

复制代码
输入: nums = [1,2,3,4]
输出: [24,12,8,6]

2、初始思路

2.1 思路

任意一个数除自身外所有数的乘积=该数前所有数的乘积 * 该数后所有数的乘积

复制代码
class Solution(object):
    def productExceptSelf(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        mul_1 = []
        mul_2 = []
        result = []
        a = 1
        b = 1
        c = 1
        n = len(nums)
        for i in range(n):
            a *= nums[i]
            mul_1.append(a)
        nums = nums[::-1]
        for i in range(n):
            b *= nums[i]
            mul_2.append(b)
        """ print(mul_1)
        print(mul_2) """
        nums = nums[::-1]
        mul_2 = mul_2[::-1]
        for i in range(n):
            if i==0:
                result.append(mul_2[1])
            elif i==n-1:
                result.append(mul_1[-2])
            else:
                c = mul_1[i-1] * mul_2[i+1]
                result.append(c)
        return result 

2.2 缺点

时间复杂度为O(n),但运行时间很长。

3 优化算法

3.1 思路

不需要一开始就生成两个乘积列表,可以在运算过程中保留结果。

复制代码
class Solution(object):
    def productExceptSelf(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        
        # 初始化结果数组
        result = [1] * n
        
        # 计算左侧乘积
        left_product = 1
        for i in range(n):
            result[i] *= left_product
            left_product *= nums[i]
        
        # 计算右侧乘积
        right_product = 1
        for i in range(n-1, -1, -1):
            result[i] *= right_product
            right_product *= nums[i]
        
        return result
相关推荐
MicroTech20252 分钟前
突破虚时演化非酉限制:MLGO微算法科技发布可在现有量子计算机运行的变分量子模拟技术
科技·算法·量子计算
m0_738120728 分钟前
网络安全编程——Python编写基于UDP的主机发现工具(解码IP header)
python·网络协议·tcp/ip·安全·web安全·udp
hssfscv8 分钟前
软件设计师下午题六——Java的各种设计模式
java·算法·设计模式
北冥有羽Victoria12 分钟前
OpenCLI 操作网页 从0到1完整实操指南
vscode·爬虫·python·github·api·ai编程·opencli
handsomestWei14 分钟前
scikit-learn数据预处理模块
python·机器学习·scikit-learn
珂朵莉MM17 分钟前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--多策略混合算法
人工智能·算法
w_t_y_y18 分钟前
机器学习常用的python包(二)工具箱scikit-learn
python·机器学习·scikit-learn
罗西的思考24 分钟前
【OpenClaw】通过 Nanobot 源码学习架构---(6)Skills
人工智能·深度学习·算法
枫叶林FYL28 分钟前
【自然语言处理 NLP】7.2 红队测试与对抗鲁棒性(Red Teaming & Adversarial Robustness)
人工智能·算法·机器学习
用户83562907805128 分钟前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python