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/numsi并加入结果数组res

思路2:(不用除法)

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

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

3)从前往后算,index从0到size-1,每次都计算resi = lefti * righti,返回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;
    }
相关推荐
小羊没烦恼!26 分钟前
Memory 记忆设计讨论:为什么 Agent Memory 不能只靠向量数据库?
java·开发语言·windows·算法·c#
ysu_03141 小时前
08-二叉树遍历:四种方式详解
c语言·数据结构·算法·leetcode
咸鱼老弟1 小时前
Speculative Decoding(投机采样):大模型"先猜后验",生成速度翻倍
前端·算法·ai编程
荆棘鸟智能1 小时前
AI算法持续学习与迭代怎么做?从数据闭环到灰度发布的MLOps工程实践
人工智能·算法·架构·边缘计算
Lyyaoo.1 小时前
【二分查找】【中等】搜索二维矩阵/排序数组的第一位和最后位置/搜索旋转排序数组/旋转排序数组中的最小值
java·数据结构·算法
土司大王1 小时前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
光电的一只菜鸡2 小时前
isp中关于锐化对图像清晰度的影响
算法
土司大王2 小时前
LeetCode hot100——4.寻找两个正序数组的中位数:Java 二分第K小 递归裁剪
java·算法·leetcode
薛定e的猫咪2 小时前
(ICML2024)QSM:基于 Q 函数梯度对齐分数场的扩散模型离策略强化学习
人工智能·深度学习·算法