使用Python查找具有奇数和的子数组数量的程序
假设我们有一个数组arr。我们必须找到具有奇数和的子数组的数量。如果答案太大,则返回结果模10^9+7。
所以,如果输入像arr=[8,3,7],那么输出将是3,因为所有的子数组都是[[8],[3],[7],[8,3],[3,7],[8,3,7]]现在它们的和值为[8,3,7,11,10,18]所以有三个奇数和值[3,7,11]。
为了解决这个问题,我们将按照以下步骤操作-
freq:=包含两个元素1和0的列表
答案:=0
前缀:=0
对于arr中的每个x,执行
前缀:=前缀+x
ans:=ans+freq[1XOR前缀AND1]
频率[前缀与1]:=频率[前缀与1]+1
返回ansmod(10^9+7)
让我们看看以下实现以获得更好的理解-
示例
def solve(arr): freq = [1, 0] ans = prefix = 0 for x in arr: prefix += x ans += freq[1 ^ prefix&1] freq[prefix &s; 1] += 1 return ans % (10**9+7) arr = [8,3,7] print(solve(arr))
输入
[8,3,7]输出结果
3