第50天(中等题 数据结构)
打卡第五十天
2道中等题

题目:

思路:

代码:
class Solution {
public:
int numOfSubarrays(vector<int>& arr) {
const int MODULO = 1000000007;
int odd = 0, even = 1; // odd: 奇数前缀数量,even: 偶数前缀数量
int subarrays = 0; // 奇数和子数组总数
int sum = 0; // 当前前缀和
int length = arr.size(); // 数组长度
for (int i = 0; i < length; i++) {
sum += arr[i]; // 更新前缀和
subarrays = (subarrays + (sum % 2 == 0 ? odd : even)) % MODULO;// 如果当前前缀和是偶数,需要与奇数前缀配对,如果当前前缀和是奇数,需要与偶数前缀配对
if (sum % 2 == 0) {// 更新奇偶前缀计数
even++; // 当前前缀和是偶数,偶数前缀数量+1
} else {
odd++; // 当前前缀和是奇数,奇数前缀数量+1
}
}
return subarrays; // 返回结果
}
};
耗时≈一小时 明天继续

浙公网安备 33010602011771号