第50天(中等题 数据结构)

打卡第五十天
2道中等题
image

题目:
image

思路:
image

代码:

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;  // 返回结果
    }
};

耗时≈一小时 明天继续

posted @ 2025-12-10 00:49  Wy0518  阅读(2)  评论(0)    收藏  举报