当前位置: 首页 > article >正文

leetcode238.除自身意外数组的乘积

 方法一:最直观的想法就是把所有元素累乘起来,最后遍历除以每一个元素就能得到目标数组,但是要注意0元素的影响,如果没有0元素直接全部累乘,如果存在1个0元素,那么只有0元素所在位置为总的非零累乘积,如果存在多个0元素那么结果是全0

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int> result(nums.size(),0);
        vector<int> zeroArr;
        int multi=1;
        for(int i=0;i<nums.size();i++){
            if(nums[i]==0)
                zeroArr.push_back(i);
            else
                multi*=nums[i];
        }
        if(zeroArr.size()==0){
            for(int i=0;i<nums.size();i++)
                result[i]=multi/nums[i];
        }else if(zeroArr.size()==1)
            result[zeroArr[0]]=multi;
        return result;
    }
};

方法二:使用前缀积和后缀积,前缀积求当前元素左边所有元素的乘积,后缀积求当前元素右边所有元素的乘积,二者相乘就是当前的结果 

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int> result(nums.size(),1);

        int prefix=1;
        for(int i=0;i<nums.size();i++){
            result[i]*=prefix;
            prefix*=nums[i];
        }
        int postfix=1;
        for(int i=nums.size()-1;i>=0;i--){
            result[i]*=postfix;
            postfix*=nums[i];
        }
        return result;
    }
};

 

 


http://www.kler.cn/a/610287.html

相关文章:

  • 解决GLIBC不兼容问题
  • 查看linux系统文件描述符限制
  • abp vnext框架重写volo.abp.openiddict的tokenController登录验证
  • 【MySQL】用户账户、角色、口令、PAM
  • 一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量
  • vue 封装 Axios菜鸟教程
  • C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤
  • P1464 Function —— 洛谷
  • C++:重载操作符
  • django入门教程之cookie和session【六】
  • Pyecharts入门之绘制地图数据
  • 云端存储新纪元:SAN架构驱动的智能网盘解决方案
  • 高维小样本数据的在线流特征选择
  • LangChain开发(二)LangChain提示词模板Template使用
  • LeetCode Hot 100 - 矩阵 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像、240.搜索二维矩阵II
  • STM32F103_LL库+寄存器学习笔记03 - GPIO设置输入模式,并轮询GPIO的电平状态
  • Day15 -实例 端口扫描工具 WAF识别工具的使用
  • 推荐一个可以自定义github主页的网站
  • WinSCP使用教程:(SFTP、SCP、FTP 和 WebDAV)
  • 【深度学习】扩散模型(Diffusion Model)详解:原理、应用与当前进展