zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    (4.24~4.30)
    (4.17~4.23)
    (4.10~4.16)
    FFT题集
    kd树的构造与搜索
    schtasks命令
    关于[WinError 10054] 远程主机强迫关闭了一个现有的连接。
    数据去重复
    将ppt文档转换成pdf
    mvc上传
  • 原文地址:https://www.cnblogs.com/xgbt/p/13381291.html
Copyright © 2011-2022 走看看