You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取数组元素位置并生成排除自身的元素乘积数组

解决数组元素排除自身的乘积问题

嘿,这个问题我之前在项目里也碰到过,其实有两种靠谱的解决思路——从适合新手理解的暴力解法,到追求效率的最优解法,我给你一步步拆解清楚:

一、直观的暴力解法(适合理解基础逻辑)

这种方法最容易上手,核心就是逐个遍历每个元素的位置,然后计算数组中除了当前位置元素外所有元素的乘积。

怎么获取位置&排除元素?

  • 获取位置:用循环的索引(比如i)来定位当前元素在数组中的位置,nums[i]就是当前位置的元素。
  • 排除元素:在嵌套循环里,判断遍历的索引j是否等于当前索引i,如果不等于就参与乘积计算。

代码示例(Python)

def product_except_self(nums):
    n = len(nums)
    result = []
    # 遍历每个元素的位置i
    for i in range(n):
        current_product = 1
        # 遍历数组所有元素的位置j
        for j in range(n):
            # 排除当前位置的元素
            if j != i:
                current_product *= nums[j]
        result.append(current_product)
    return result

测试验证

  • 输入[1,2,3],输出[6,3,2],符合预期;
  • 输入[5,2,3,2,4],输出[48,120,80,120,60],完全匹配示例。

不过要注意,这种方法的时间复杂度是O(n²),如果数组元素特别多(比如上万条),运行效率会比较低,所以下面给你讲更高效的解法。

二、高效的左右乘积法(最优解)

这个方法的核心思路是分别计算每个元素左边所有元素的乘积、右边所有元素的乘积,最后把左右乘积相乘,得到的就是排除当前元素的总乘积,时间复杂度是O(n),空间复杂度几乎为O(1)(除了存储结果的数组)。

代码示例(Python)

def product_except_self(nums):
    n = len(nums)
    result = [1] * n  # 初始化结果数组
    
    # 第一步:计算每个元素左边所有元素的乘积,存入result
    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

逻辑拆解

  1. 第一个循环从左到右遍历:result[i]先存下i位置左边所有元素的乘积,然后更新left_product为包含当前元素的乘积,方便下一个位置使用;
  2. 第二个循环从右到左遍历:把i位置右边所有元素的乘积乘到result[i]里,这样result[i]就变成了左边乘积×右边乘积,也就是除了nums[i]之外所有元素的乘积。

这种方法不需要嵌套循环,效率高很多,而且也间接实现了“排除当前元素”的需求,不需要直接判断索引跳过元素。


内容的提问来源于stack exchange,提问作者Eduardo Quiñonez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:04:44