使用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[1 XOR 前缀 AND 1]

    • 频率[前缀与 1] := 频率[前缀与 1] + 1

  • 返回 ans mod (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

猜你喜欢