使用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的列表
ans := 0
prefix := 0
对于arr中的每个x,执行:
prefix := prefix + x
ans := ans + freq[1 XOR prefix AND 1]
freq[prefix AND 1] := freq[prefix AND 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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP