16.求数组除了当前元素的所有乘积

1.题目描述

示例 1:

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

示例 2:

复制代码
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

2.解题思路

思路1:(0要单独处理)

1)第一次循环算出所有元素的乘积all

2)第二次循环遍历每个元素,算出all/nums[i]并加入结果数组res

思路2:(不用除法)

1)第一次循环从前往后循环(index从1到size -1),算出nums[i]左边的所有元素乘积,保存到left数组中

2)第二次循环从后往前循环(index从size-2到0),算出nums[i]右边的所有元素乘积,保存到right数组中

3)从前往后算,index从0到size-1,每次都计算res[i] = left[i] * right[i],返回res即可

3.代码

cpp 复制代码
  vector<int> productExceptSelf(vector<int>& nums) {
        int size=nums.size();
        if(size==0){
            return {};
        }
        
        vector<int> left(size);
        vector<int> right(size);
        vector<int> res(size);
        left[0] = 1;
        right[size-1]=1;
//先算nums[i]的左边所有元素的乘积,从前往后算
        for(int i =1; i<=size -1 ;i++  ){
            left[i] = left[i-1] * nums[i-1];
        }
        //算nums[i]的右边所有乘积,从后往前算
        for(int j = size -2;j>=0;j--){
            right[j] = right[j+1]*nums[j+1];
        }
        //开始计算nums[i]左边乘积 乘以  右边乘积
        for(int i = 0;i<=size-1;i++){
            res[i] = left[i]*right[i];
        }
        return res;
    }
相关推荐
zheyutao31 分钟前
字符串哈希
算法
A尘埃39 分钟前
保险公司车险理赔欺诈检测(随机森林)
算法·随机森林·机器学习
大江东去浪淘尽千古风流人物1 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
努力学算法的蒟蒻2 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495642 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦2 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
2401_841495643 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli3 小时前
优选算法-字符串
算法
我是咸鱼不闲呀3 小时前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
qq7422349843 小时前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程