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


    2020-07-26 19:20:40

    问题描述:

    给你一个整数数组 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

    问题求解:

    采用前缀和的思路即可,计数当前的presum和之前的奇偶presum数量,就可以得到最终的解。

    本题的一个提示是”子数组“。

        int mod = (int)1e9 + 7;
        public int numOfSubarrays(int[] arr) {
            int res = 0;
            int presum = 0;
            int odd = 0;
            int even = 1;
            for (int num : arr) {
                presum += num;
                if (presum % 2 == 0) {
                    res = (res + odd) % mod;
                    even += 1;
                }
                else {
                    res = (res + even) % mod;
                    odd += 1;
                }
            }
            return res;
        }
    

      

  • 相关阅读:
    链式栈的C++实现
    Java面试之设计模式二
    前端资源
    Java面试之异常
    Java面试之序列化
    Java面试之重写(Override)与重载(Overload)
    项目视图展示
    Java面试之集合
    Java面试之SSH框架面试题集锦
    JDBC技术
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/13381556.html
Copyright © 2020-2023  润新知