📅  最后修改于: 2023-12-03 15:36:47.669000             🧑  作者: Mango
给定一个长度为n的整数数组,计算其中具有奇数乘积的子数组的个数。
Input: [1,2,3,4,5]
Output: 16
Explanation:
具有奇数乘积的子数组有:
[1], [1,2,3], [1,2,3,4,5], [2,3], [2,3,4,5], [3,4,5], [3], [3,4], [3,4,5], [4,5], [5], [1,5], [1,3,5], [2,5], [1,2,5], [1,2,3,5]
对于每个数,考虑以当前数作为结尾的子数组有哪些,累加计算具有奇数乘积的子数组的数量。
具体而言,对于当前数,有两种情况:
用变量cnt统计以当前数结尾的子数组中奇数的个数,每读入一个数,根据以上两种情况更新cnt和答案即可。
class Solution:
def numberOfSubarrays(self, nums: List[int]) -> int:
cnt = [0] * 2 # 以当前数结尾的子数组中奇数的个数
ans = 0
for num in nums:
if num % 2 == 1:
cnt[0], cnt[1] = cnt[1], cnt[0] # 奇数个数为cnt[1]
cnt[1] += 1
ans += cnt[1]
else:
ans += cnt[1]
return ans