zoukankan      html  css  js  c++  java
  • 【leetcode】1524. Number of Sub-arrays With Odd Sum

    题目如下:

    Given an array of integers arr. Return the number of sub-arrays with odd sum.

    As the answer may grow large, the answer must be computed modulo 10^9 + 7

    Example 1:

    Input: arr = [1,3,5]
    Output: 4
    Explanation: All sub-arrays are [[1],[1,3],[1,3,5],[3],[3,5],[5]]
    All sub-arrays sum are [1,4,9,3,8,5].
    Odd sums are [1,9,3,5] so the answer is 4.
    

    Example 2:

    Input: arr = [2,4,6]
    Output: 0
    Explanation: All sub-arrays are [[2],[2,4],[2,4,6],[4],[4,6],[6]]
    All sub-arrays sum are [2,6,12,4,10,6].
    All sub-arrays have even sum and the answer is 0.
    

    Example 3:

    Input: arr = [1,2,3,4,5,6,7]
    Output: 16
    

    Example 4:

    Input: arr = [100,100,99,99]
    Output: 4
    

    Example 5:

    Input: arr = [7]
    Output: 1

    Constraints:

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

    解题思路:假设dp_odd[i] = v表示以第i个元素作为子数组的最后一个元素时,arr有v个和为奇数的子数组,dp_even[i] = v2 则表示,arr中有v2个和为偶数子数组。对于任意一个arr[i],如果值为奇数,那么可以和前面和为偶数的子数组形成和为奇数的子数组,一共有 dp_odd[i] = dp_even[i-1] + 1 (这里加1是因为arr[i]可以独自组成一个和为奇数的子数组),而dp_even[i] = dp_odd[i-1];同理arr[i]为偶数时原理是一样的。

    代码如下:

    class Solution(object):
        def numOfSubarrays(self, arr):
            """
            :type arr: List[int]
            :rtype: int
            """
            dp_odd = [0] * len(arr)
            dp_even = [0] * len(arr)
            if arr[0] % 2 == 0:
                dp_even[0] = 1
            else:dp_odd[0] = 1
    
            for i in range(1,len(arr)):
                if arr[i] % 2 == 0:
                    dp_even[i] += (dp_even[i-1] + 1)
                    dp_odd[i] += dp_odd[i-1]
                else:
                    dp_even[i] += dp_odd[i-1]
                    dp_odd[i] += (dp_even[i - 1] + 1)
            #print dp_even
            #print dp_odd
            return sum(dp_odd) % (10**9+7)
  • 相关阅读:
    WPF系列学习之三(路由事件)
    WPF学习系列之二 (依赖项属性)
    WPF学习笔记系列之一 (布局详情)
    常用CDN公共库
    Day2-运算+流程控制+函数
    Day1-shell
    Day10-rsync
    Day2-EMOS
    Day9-Postfix
    Day1-dns Extension
  • 原文地址:https://www.cnblogs.com/seyjs/p/13666832.html
Copyright © 2011-2022 走看看