开发网站通过第三方微信认证登录开发费用,网站建设属不属于无形资产,seo免费教程,php电商网站开发的优势题目
按规则计算统计结果 为了深入了解这些生物群体的生态特征#xff0c;你们进行了大量的实地观察和数据采集。数组 arrayA 记录了各个生物群体数量数据#xff0c;其中 arrayA[i] 表示第 i 个生物群体的数量。请返回一个数组 arrayB#xff0c;该数组为基于数组 arrayA …题目
按规则计算统计结果 为了深入了解这些生物群体的生态特征你们进行了大量的实地观察和数据采集。数组 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 元素乘积后分情况讨论
先计算所有非 0 元素的乘积如果有大于一个 0则数组B 全为 0小于等于一个0则根据要填入的位置上对应数组A 的元素是否为 0 分类讨论
vectorint statisticalResult(vectorint 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} }vectorint 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/