Skip to content

Commit a3b3495

Browse files
authored
Update 907-sum-of-subarray-minimums.js
1 parent 4c5514c commit a3b3495

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

907-sum-of-subarray-minimums.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,36 @@
22
* @param {number[]} arr
33
* @return {number}
44
*/
5-
const sumSubarrayMins = function(arr) {
6-
const n = arr.length, s1 = [], s2 = [], left = Array(n), right = Array(n)
7-
for(let i = 0; i < n; i++) {
5+
const sumSubarrayMins = function (arr) {
6+
const n = arr.length,
7+
s1 = [],
8+
s2 = [],
9+
left = Array(n),
10+
right = Array(n)
11+
for (let i = 0; i < n; i++) {
812
let cnt = 1
9-
while(s1.length && s1[s1.length - 1][0] > arr[i]) {
13+
while (s1.length && s1[s1.length - 1][0] > arr[i]) {
1014
cnt += s1.pop()[1]
1115
}
1216
left[i] = cnt
1317
s1.push([arr[i], cnt])
1418
}
15-
16-
for(let i = n - 1; i >= 0; i--) {
19+
20+
for (let i = n - 1; i >= 0; i--) {
1721
let cnt = 1
18-
// use ">=" to deal with duplicate elements
19-
while(s2.length && s2[s2.length - 1][0] >= arr[i]) {
22+
while (s2.length && s2[s2.length - 1][0] >= arr[i]) {
2023
cnt += s2.pop()[1]
2124
}
2225
right[i] = cnt
2326
s2.push([arr[i], cnt])
2427
}
2528
let res = 0
2629
const mod = 1e9 + 7
27-
for(let i = 0; i < n; i++) {
30+
for (let i = 0; i < n; i++) {
2831
// left[i] number of starting positions
2932
// right[i] number of ending positions
3033
res = (res + arr[i] * left[i] * right[i]) % mod
3134
}
32-
35+
3336
return res
34-
};
37+
}

0 commit comments

Comments
 (0)