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);
}
}
标签:arr,907,min,int,res,示例,最小值,数组,LeetCode 来源: https://blog.csdn.net/w7486/article/details/122780128