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


    目录
    相关文章
    |
    3月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java
    |
    5月前
    |
    算法 Java
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    58 6
    |
    5月前
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    79 2
    |
    5月前
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    55 1
    |
    5月前
    |
    存储 算法 Java
    LeetCode经典算法题:预测赢家+香槟塔java解法
    LeetCode经典算法题:预测赢家+香槟塔java解法
    70 1
    |
    5月前
    |
    算法 Python
    【Leetcode刷题Python】子数组查找
    一个用于寻找给定字符串中最长重复子串的Python函数实现,采用了滑动窗口的方法来检测重复的子串。
    24 1
    |
    5月前
    |
    存储 算法 Java
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    84 0
    |
    5月前
    |
    算法 Java
    LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
    LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
    45 0
    |
    5月前
    |
    算法 Java
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    59 0
    |
    5月前
    |
    存储 算法 Java
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    49 0