美文网首页
907. 子数组的最小值之和

907. 子数组的最小值之和

作者: 程序员小2 | 来源:发表于2022-10-28 08:49 被阅读0次

题目:

给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。

由于答案可能很大,因此 返回答案模 10^9 + 7 。

示例 1:

输入:arr = [3,1,2,4]
输出:17
解释:
子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。
最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。
示例 2:

输入:arr = [11,81,94,43,3]
输出:444

提示:

1 <= arr.length <= 3 * 10^4
1 <= arr[i] <= 3 * 10^4

java代码:

class Solution {
    public int sumSubarrayMins(int[] arr) {
        int n = arr.length;
        long ans = 0;
        final int MOD = 1000000007;
        Deque<Integer> monoStack = new ArrayDeque<Integer>();
        int[] dp = new int[n];
        for (int i = 0; i < n; i++) {
            while (!monoStack.isEmpty() && arr[monoStack.peek()] > arr[i]) {
                monoStack.pop();
            }
            int k = monoStack.isEmpty() ? (i + 1) : (i - monoStack.peek());
            dp[i] = k * arr[i] + (monoStack.isEmpty() ? 0 : dp[i - k]);
            ans = (ans + dp[i]) % MOD;
            monoStack.push(i);
        }
        return (int) ans;
    }
}

相关文章

  • 5.栈(五)

    题目汇总:https://leetcode-cn.com/tag/stack/907. 子数组的最小值之和中等(题...

  • 907. 子数组的最小值之和

    题目: 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 ...

  • 编程记录

    code programming 计算数组子数组之和的最大值 描述:给定一个包含N个整数的数组,求数组子数组之和的...

  • #常见面试算法题

    阅读目录 *求数组最大连续子序列之和 1.求数组最大连续子序列之和 一个有N个元素的整型数组arr,有正有负,数组...

  • 子数组之和

    1.题目描述 给定一个含有n个元素的整形数组a,再给定一个和sum,求出数组中满足给定和的所有元素组合,举个例子,...

  • 栈-N907-子数组的最小值之和

    题目 概述:给定一个数组,求该数组的所有连续子数组最小元素的和 输入:整数数组,长度范围[1, 30000] 输入...

  • 最大子数组之和

    问题: 输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组。 描述: 输入的数组为1...

  • 数组利用前缀和求子数组问题

    1、子数组之和https://www.lintcode.com/problem/subarray-sum/desc...

  • 138. 子数组之和

    给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。假定一定存在这样的字数...

  • 【今日头条】非负整数数组,求子序列和与最小值乘积的最大值。

    1、题目描述 一个非负数组,例如【1,0, 3, 2,5】,求数组的一个子序列,使得子序列的和与子序列的最小值的乘...

网友评论

      本文标题:907. 子数组的最小值之和

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