为了深入了解这些生物群体的生态特征,你们进行了大量的实地观察和数据采集。数组 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
法一:简答的双重循环,超时了。。。。。。。。。。。。。
class Solution(object):
def statisticalResult(self, arrayA):
"""
:type arrayA: List[int]
:rtype: List[int]
"""
s=[]
for i in range(len(arrayA)):
t=1
for j in range(len(arrayA)):
if j!=i:
t=t*arrayA[j]
s.append(t)
return s
法二:
避免使用双重循环,可以统计0的个数
先计算所有数字之和,如果这个数字是0,就让t乘以1
情况1:如果没有0,就不会出现除以0的情况,照常计算就可以了
情况2:如果有1个0,计算其余数字乘积时候,如果这个数字本身就是0,直接添加t就可以,如果这个数字不是0,那就直接返回0(说明其他数字相乘的时候存在了一个0,结果还是0)
情况三:有两个以上0,直接所有的都是0,显而易见
class Solution(object):
def statisticalResult(self, arrayA):
"""
:type arrayA: List[int]
:rtype: List[int]
"""
s=[]
j=0 #统计0的个数
t=1 #用来求所有数字的乘积
for i in arrayA:
if i==0:
j+=1 #存在0的话,让j增加1
t=t*1
else:
t=t*i
if j>1:
s=[0 for i in range(len(arrayA))]
elif j==0:
for i in range(len(arrayA)):
s.append(t/arrayA[i])
else:
for i in range(len(arrayA)):
if arrayA[i]==0:
s.append(t)
else:
s.append(0)
return s
法三、等我学习下答案哈哈