• 5457. 和为奇数的子数组数目。 前缀和


    给你一个整数数组 arr 。请你返回和为 奇数 的子数组数目。

    由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。

    示例 1:

    输入:arr = [1,3,5]
    输出:4
    解释:所有的子数组为 [[1],[1,3],[1,3,5],[3],[3,5],[5]] 。
    所有子数组的和为 [1,4,9,3,8,5].
    奇数和包括 [1,9,3,5] ,所以答案为 4 。
    示例 2 :

    输入:arr = [2,4,6]
    输出:0
    解释:所有子数组为 [[2],[2,4],[2,4,6],[4],[4,6],[6]] 。
    所有子数组和为 [2,6,12,4,10,6] 。
    所有子数组和都是偶数,所以答案为 0 。
    示例 3:

    输入:arr = [1,2,3,4,5,6,7]
    输出:16
    示例 4:

    输入:arr = [100,100,99,99]
    输出:4
    示例 5:

    输入:arr = [7]
    输出:1

    提示:

    1 <= arr.length <= 10^5
    1 <= arr[i] <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-sub-arrays-with-odd-sum
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution {
    public:
        int numOfSubarrays(vector<int>& arr) {
            //空数组的话为0,所以even初始为1
            int odd = 0, even = 1;
            long long ans = 0;
            int sum = 0;
    
            for (int num : arr) {
                sum += num;
                //若当前前缀和为偶,去掉里面的奇数才是奇,所以加上此时奇数个数
                //若当前前缀和为奇,去掉里面的偶数也还是奇,所以加上此时偶数个数
                ans += (sum % 2 == 0 ? odd : even);
                if (sum % 2 == 0) {
                    ++even;
                }
                else {
                    ++odd;
                }
            }
    
            return ans % 1000000007;
        }
    };
    
  • 相关阅读:
    跨域上传文件
    算法
    websocket
    Bottle
    爬虫一
    RabbitMQ
    git&github快速入门
    centos6安装SaltStack
    ajax
    Django之Model操作
  • 原文地址:https://www.cnblogs.com/xgbt/p/13381291.html
Copyright © 2020-2023  润新知