LeetCode:#907子数组的最小值之和

2022/2/4 6:15:33

本文主要是介绍LeetCode:#907子数组的最小值之和,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

给定一个整数数组 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 * 104
1 <= arr[i] <= 3 * 104

 三次循环的方式效率太低会时间超时

class Solution {
    public int sumSubarrayMins(int[] arr) {
        return myMain(arr);
    }
    public int myMain(int[] arr) {
        long res = 0;
        long mod = 1000000007;
        for(int i=1; i <= arr.length; i++){
            //i控制分组
            for (int j=0; j <=arr.length-i; j++) {
                //每次假设最小的是分组的第一个
                int min = j;
                for (int k = j; k < j+i;  k++) {
                    //每个分组进行一次比较 找出最小的 
                    // System.out.print(arr[k]);
                    if (arr[min] > arr[k]) {
                        min = k;
                    }
                }
                res += arr[min];
                // System.out.println("  " + " min:"+arr[min]);
            }
        }
        return (int)(res % mod);
    }
}

 



这篇关于LeetCode:#907子数组的最小值之和的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程