[除自身以外数组的乘积]

cpp 复制代码
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int> l(nums.size(),1);
        vector<int> r(nums.size(),1);
        vector<int> ans(nums.size(),1);
        for(int i=1;i<nums.size();i++)
        {
            l[i]=nums[i-1]*l[i-1];
        }
        for(int i=nums.size()-2;i>=0;i--)
        {
            r[i]=nums[i+1]*r[i+1];
        }
        for(int i=0;i<nums.size();i++)
        {
            ans[i]=l[i]*r[i];
        }
        return ans;

    }
};

代码思路

采用左右乘积列表的方法,分为三个清晰步骤:

1. 初始化三个数组
cpp 复制代码
vector<int> l(nums.size(),1);  // 存储每个元素左侧所有元素的乘积
vector<int> r(nums.size(),1);  // 存储每个元素右侧所有元素的乘积
vector<int> ans(nums.size(),1); // 最终结果

li:表示 nums[i] 左边所有元素 的乘积(初始为1)

ri:表示 nums[i] 右边所有元素的乘积(初始为1)

2. 计算左侧乘积(从左到右遍历)
cpp 复制代码
for(int i=1; i<nums.size(); i++) {
    l[i] = nums[i-1] * l[i-1];
}

逻辑

当前元素的左侧乘积 = 前一个元素的值 × 前一个元素的左侧乘积

例如:nums = [1,2,3,4]
l[0] = 1(初始值)
l[1] = nums[0] × l[0] = 1 × 1 = 1
l[2] = nums[1] × l[1] = 2 × 1 = 2
l[3] = nums[2] × l[2] = 3 × 2 = 6

结果:l = [1, 1, 2, 6]

3. 计算右侧乘积(从右到左遍历)
cpp 复制代码
for(int i=nums.size()-2; i>=0; i--) {
    r[i] = nums[i+1] * r[i+1];
}

逻辑

当前元素的右侧乘积 = 后一个元素的值 × 后一个元素的右侧乘积

继续以 nums = [1,2,3,4] 为例:
r[3] = 1(初始值)
r[2] = nums[3] × r[3] = 4 × 1 = 4
r[1] = nums[2] × r[2] = 3 × 4 = 12
r[0] = nums[1] × r[1] = 2 × 12 = 24

结果:r = [24, 12, 4, 1]

4. 合并左右乘积得到结果
cpp 复制代码
for(int i=0; i<nums.size(); i++) {
    ans[i] = l[i] * r[i];
}

逻辑

最终结果 = 左侧乘积 × 右侧乘积

继续示例:
ans[0] = l[0] × r[0] = 1 × 24 = 24
ans[1] = 1 × 12 = 12
ans[2] = 2 × 4 = 8
ans[3] = 6 × 1 = 6

结果:ans = [24, 12, 8, 6]

相关推荐
Yfhonier7 分钟前
6440. 极大连通图个数(DFS)
数据结构·算法·深度优先
玖玥拾19 分钟前
LeetCode 1 两数之和
算法·leetcode·职场和发展
Cccp.12319 分钟前
【leetcode】(一)认识复杂度和简单排序算法
算法·排序算法
旖旎夜光28 分钟前
LeetCode 974:和可被 K 整除的子数组(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
无限码力32 分钟前
拼多多笔试真题 2026-8-30【唯一入栈出库序列】
算法·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多最新笔试题库
lvwangshu33 分钟前
分治:序列分治(CDQ)与点分治
算法·分治
无限码力37 分钟前
2026-8-30拼多多笔试真题-哪个查阅窗能留空(C++/Py/Java /Js/Go)
算法·pdd·pdd笔试真题·拼多多春招笔试真题·拼多多秋招笔试真题·拼多多笔试真题题解·拼多多笔试题解
luj_17681 小时前
毒素驱动的生物自毁机制探析
服务器·c语言·开发语言·经验分享·算法
一水鉴天1 小时前
问题分类的三元组映射体系与求解方法论 20260901(千问)
人工智能·算法·机器学习