为了深入了解这些生物群体的生态特征,你们进行了大量的实地观察和数据采集。数组 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,那直接返回全0数组就可以了(无论当前数是不是0,结果数组当前的元素算出来必为0);如果有一个,那么除了为0的元素对应的结果数组中的元素是原数组中算出来mul之外,其他的元素都是0.
class Solution {
public:
vector<int> statisticalResult(vector<int>& arrayA) {
vector<int> arrayB;
int len = arrayA.size(), mul = 1;
bool has_zero = false;
bool has_double_zero = false;
for(int i = 0;i < len;i++){
if(arrayA[i] == 0){
if(has_zero){//如果原数组有两个0,则返回全0
for(int i = 0;i < len;i++) arrayB.push_back(0);
return arrayB;
}
has_zero = true;
continue;
}
mul *= arrayA[i];
}
for(int i = 0;i < len;i++){
if(arrayA[i] == 0) arrayB.push_back(mul);
else if(has_zero) arrayB.push_back(0);
else arrayB.push_back(mul/arrayA[i]);
}
return arrayB;
}
};