File tree Expand file tree Collapse file tree 1 file changed +20
-19
lines changed Expand file tree Collapse file tree 1 file changed +20
-19
lines changed Original file line number Diff line number Diff line change 2
2
* @param {number[] } A
3
3
* @return {number }
4
4
*/
5
- const sumSubarrayMins = function ( A ) {
6
- let n = A . length ;
7
- let s1 = [ ] ;
8
- let s2 = [ ] ;
9
- let left = new Array ( n ) ;
10
- let right = new Array ( n ) ;
5
+ const sumSubarrayMins = function ( A ) {
6
+ const n = A . length
7
+ const s1 = [ ]
8
+ const s2 = [ ]
9
+ const left = new Array ( n )
10
+ const right = new Array ( n )
11
11
12
12
for ( let i = 0 ; i < n ; i ++ ) {
13
- let count = 1 ;
13
+ let count = 1
14
14
while ( s1 . length && s1 [ s1 . length - 1 ] [ 0 ] > A [ i ] ) {
15
- count += s1 . pop ( ) [ 1 ] ;
15
+ count += s1 . pop ( ) [ 1 ]
16
16
}
17
- left [ i ] = count ;
18
- s1 . push ( [ A [ i ] , count ] ) ;
17
+ left [ i ] = count
18
+ s1 . push ( [ A [ i ] , count ] )
19
19
}
20
20
21
21
for ( let i = n - 1 ; i >= 0 ; i -- ) {
22
- let count = 1 ;
22
+ let count = 1
23
+ // use ">=" to deal with duplicate elements
23
24
while ( s2 . length && s2 [ s2 . length - 1 ] [ 0 ] >= A [ i ] ) {
24
- count += s2 . pop ( ) [ 1 ] ;
25
+ count += s2 . pop ( ) [ 1 ]
25
26
}
26
- right [ i ] = count ;
27
- s2 . push ( [ A [ i ] , count ] ) ;
27
+ right [ i ] = count
28
+ s2 . push ( [ A [ i ] , count ] )
28
29
}
29
30
30
- let res = 0 ;
31
- let mod = 1e9 + 7 ;
31
+ let res = 0
32
+ const mod = 1e9 + 7
32
33
for ( let i = 0 ; i < n ; i ++ ) {
33
- res = ( res + left [ i ] * A [ i ] * right [ i ] ) % mod ;
34
+ res = ( res + left [ i ] * A [ i ] * right [ i ] ) % mod
34
35
}
35
- return res ;
36
- } ;
36
+ return res
37
+ }
You can’t perform that action at this time.
0 commit comments