907. 子数组的最小值之和 --力扣 --JAVA

简介: 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9 + 7 。

 题目

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

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

解题思路

    1. 找到以当前值为最小值所能组成的子数组;
    2. 若存在两个相同元素则左右边界只允许包含一边,否则会重复计算中间区域;
    3. 在每次计算后对10^9 + 7取余。

    代码展示

    class Solution {
        public int sumSubarrayMins(int[] arr) {
            int MOD = 1000000007;
            int n = arr.length;
            long ans = 0L;
            for (int i = 0; i < n; i++){
                int num = arr[i];
                //左右两侧只允许一侧可以等于当前值,否则会重复计算中间值
                //遍历左侧
                int left = i - 1;
                for ( ; left >= 0; left--){
                    if(arr[left] <= num){
                        break;
                    }
                }
                //遍历右侧
                int right = i + 1;
                for ( ; right < n; right++){
                    if(arr[right] < num){
                        break;
                    }
                }
                ans = (ans + (long)(i - left) * (long)(right - i) * num) % MOD;
            }
            return (int) ans;
        }
    }

    image.gif


    目录
    相关文章
    |
    19天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    [Java·算法·简单] LeetCode 27. 移除元素 详细解读
    28 1
    |
    19天前
    |
    算法 Java C语言
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    |
    19天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    [Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
    27 0
    |
    19天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    [Java·算法·简单] LeetCode 392. 判断子序列 详细解读
    44 0
    |
    19天前
    |
    存储 canal 算法
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    [Java·算法·简单] LeetCode 125. 验证回文串 详细解读
    31 0
    |
    10天前
    |
    存储 Java
    JAVA数据结构刷题 -- 力扣二叉树
    JAVA数据结构刷题 -- 力扣二叉树
    16 0
    |
    19天前
    |
    存储 算法 Java
    Java:查找一个给定数组中的最大值和最小值
    Java:查找一个给定数组中的最大值和最小值
    |
    19天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    [Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
    30 0
    |
    19天前
    |
    算法 Java
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    [Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
    23 0
    |
    19天前
    |
    算法 Java 索引
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    [Java·算法·简单] LeetCode 141. 环形链表 详细解读
    29 0