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

[LeetBook]【学习日记】数组内乘积

题目

按规则计算统计结果

为了深入了解这些生物群体的生态特征,你们进行了大量的实地观察和数据采集。数组 arrayA 记录了各个生物群体数量数据,其中
arrayA[i] 表示第 i 个生物群体的数量。请返回一个数组 arrayB,该数组为基于数组 arrayA 中的数据计算得出的结果,其中
arrayB[i] 表示将第 i 个生物群体的数量从总体中排除后的其他数量的乘积。
示例 1:

输入:arrayA = [2, 4, 6, 8, 10] 输出:[1920, 960, 640, 480, 384]

提示:

所有元素乘积之和不会溢出 32 位整数 arrayA.length <= 100000

思路

  • 如果遍历解决本题,时间复杂度太高,一般来说都会超时
  • 需要利用已经计算过的结果进行进一步的计算,下面的两种解法都是基于这种思想
  • 由于数组内可能有0,且只有一个0和大于一个0这两种情况的结果还不一样,需特别注意

解法1:利用除法,计算所有非 0 元素乘积后分情况讨论

  1. 先计算所有非 0 元素的乘积
  2. 如果有大于一个 0,则数组B 全为 0
  3. 小于等于一个0,则根据要填入的位置上对应数组A 的元素是否为 0 分类讨论
vector<int> statisticalResult(vector<int>& arrayA) {int product = 1;bool have1Zero = false, have2Zero = false;for(auto &ele: arrayA){if(ele) product *= ele;//计算出所有非0元素的乘积else{if(have1Zero == true) have2Zero = true;//多于一个0have1Zero = true; //必有一个0} }vector<int> B;if(!have2Zero){// <=一个0,分情况填入for(auto &ele: arrayA){if(!ele) B.push_back(product);else if(have1Zero) B.push_back(0);else B.push_back(product/ele);} }else{//多于一个0,则输出全为0for(auto &ele: arrayA){B.push_back(0);} }return B;}

解法2:只利用乘法

在这里插入图片描述

https://leetcode.cn/leetbook/read/illustration-of-algorithm/lhiayd/

相关文章:

  • 大宋咨询数据研究在汽车新品上市中的核心作用
  • H5小游戏,斗地主
  • 备赛蓝桥杯-算法-动态规划
  • ViewModel 原理
  • (3)(3.2) MAVLink2数据包签名(安全)
  • redis06 redis事务
  • web组态(BY组态)接入流程
  • CAN总线位时序的介绍
  • OpenMMlab AI实战营第四期培训
  • MySQL——性能调优
  • [蓝桥杯 2020 省 B1] 整除序列
  • 如何在十几秒内高效实现几十万条数据的快速插入
  • TestNG @Test注释属性- threadPoolSize属性
  • 自适应哈希索引
  • python网络爬虫教程笔记(1)
  • 深入了解以太坊
  • Laravel Telescope:优雅的应用调试工具
  • php中curl和soap方式请求服务超时问题
  • SOFAMosn配置模型
  • Spring-boot 启动时碰到的错误
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开源地图数据可视化库——mapnik
  • 跨域
  • 离散点最小(凸)包围边界查找
  • 码农张的Bug人生 - 初来乍到
  • 微信开放平台全网发布【失败】的几点排查方法
  • - 转 Ext2.0 form使用实例
  • 《码出高效》学习笔记与书中错误记录
  • 1.Ext JS 建立web开发工程
  • FaaS 的简单实践
  • Linux权限管理(week1_day5)--技术流ken
  • PostgreSQL之连接数修改
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $GOPATH/go.mod exists but should not goland
  • (分享)自己整理的一些简单awk实用语句
  • (区间dp) (经典例题) 石子合并
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (译)2019年前端性能优化清单 — 下篇
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • .chm格式文件如何阅读
  • .NET Reactor简单使用教程
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Android]Tool-Systrace
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C#]科学计数法(scientific notation)显示为正常数字