⭐️⭐️⭐️
# 題目敘述
Given an array of integers arr, find the sum of min(b)
, where b
ranges over every (contiguous) subarray of arr
. Since the answer may be large, return the answer modulo 10^9 + 7
.
# Example 1
Input: arr = [3,1,2,4]
Output: 17
Explanation:
Subarrays are [3], [1], [2], [4], [3,1], [1,2], [2,4], [3,1,2], [1,2,4], [3,1,2,4].
Minimums are 3, 1, 2, 4, 1, 1, 2, 1, 1, 1.
Sum is 17.
# Example 2
Input: arr = [11,81,94,43,3]
Output: 444
# 解題思路
# Solution
import java.util.Stack; | |
class Solution { | |
public int sumSubarrayMins(int[] arr) { | |
final int MOD = (int) 1e9 + 7; | |
Stack<Integer> stack = new Stack<>(); | |
long sum = 0; | |
for (int i = 0; i <= arr.length; i++) { | |
while (!stack.empty() && (i == arr.length || arr[stack.peek()] >= arr[i])) { | |
int mid = stack.pop(); | |
int leftBoundary = stack.empty() ? -1 : stack.peek(); | |
int rightBoundary = i; | |
long count = (mid - leftBoundary) * (rightBoundary - mid) % MOD; | |
sum += (count * arr[mid]) % MOD; | |
sum %= MOD; | |
} | |
stack.push(i); | |
} | |
return (int) sum; | |
} | |
} |
單字
** **
!! !!
片語 & 搭配詞
!! !!