美文网首页
【算法题】2750. 将数组划分成若干好子数组的方式

【算法题】2750. 将数组划分成若干好子数组的方式

作者: 程序员小2 | 来源:发表于2023-07-05 22:00 被阅读0次

题目:

给你一个二元数组 nums 。

如果数组中的某个子数组 恰好 只存在 一 个值为 1 的元素,则认为该子数组是一个 好子数组 。

请你统计将数组 nums 划分成若干 好子数组 的方法数,并以整数形式返回。由于数字可能很大,返回其对 109 + 7 取余 之后的结果。

子数组是数组中的一个连续 非空 元素序列。

示例 1:

输入:nums = [0,1,0,0,1]
输出:3
解释:存在 3 种可以将 nums 划分成若干好子数组的方式:

  • [0,1] [0,0,1]
  • [0,1,0] [0,1]
  • [0,1,0,0] [1]
    示例 2:

输入:nums = [0,1,0]
输出:1
解释:存在 1 种可以将 nums 划分成若干好子数组的方式:

  • [0,1,0]

提示:

1 <= nums.length <= 10^5
0 <= nums[i] <= 1

java代码:

class Solution {
    public int numberOfGoodSubarraySplits(int[] nums) {
        final long MOD = (long) 1e9 + 7;
        long ans = 1;
        int pre = -1, n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] == 0) continue;
            if (pre >= 0) ans = ans * (i - pre) % MOD;
            pre = i;
        }
        return pre < 0 ? 0 : (int) ans;
    }
}

相关文章

  • 将数组拆分成固定长度数组

    #pragma mark -- 将数组拆分成固定长度 /** *将数组拆分成固定长度的子数组 * *@parama...

  • 无标题文章

    #pragma mark -- 将数组拆分成固定长度 /** *将数组拆分成固定长度的子数组 * *@parama...

  • javaScript数据结构和算法--归并排序

    归并排序是一种分治算法,分而治之,将原始数组拆分成最小粒度的数组(数组的长度是1),接着将这些小数组进行归并(me...

  • 快速排序

    快速排序算法思想 快速排序和归并排序是互补的,归并排序将整个数组分成小数组,然后将排好序的小数组归并以将整个数组排...

  • 16.8 快速排序之qsort()函数

    对于大型数组,“快速排序”是最有效的排序算法之。它把数组不断分成更小的数组,直到变成单元数组。首先,把数组分成两个...

  • js将一个数组分成多个数组

    js将一个数组分成多个数组 1,将数组array分成长度为subGroupLength的小数组并返回新数组 fun...

  • golang实现堆排序

    算法题:给定一个整型数组,将数组的中的元素按升序排序。 基本思路:操作:排序输入:无序整型数组输出:有序整型数组 ...

  • 归并排序(JS)

      归并排序是一种分治算法。其思想是将原始数组从中间切分成较小的左右两个数组,再将左右两个数组分别从中间切分成更小...

  • Quick sort

    快速排序是一种分治算法,将一个数组分成两个子数组,将两部分独立的排序。快速排序和归并排序是互补的:归并排序将数组分...

  • 5643. 将数组分成三个子数组的方案数

    5643. 将数组分成三个子数组的方案数[https://leetcode-cn.com/problems/way...

网友评论

      本文标题:【算法题】2750. 将数组划分成若干好子数组的方式

      本文链接:https://www.haomeiwen.com/subject/prakudtx.html