File tree 3 files changed +64
-0
lines changed
solution/0900-0999/0907.Sum of Subarray Minimums
3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change 61
61
62
62
```
63
63
64
+ ### ** TypeScript**
65
+
66
+ ``` ts
67
+ function sumSubarrayMins(arr : number []): number {
68
+ const n = arr .length ;
69
+ function getEle(i : number ): number {
70
+ if (i == - 1 || i == n ) return Number .MIN_SAFE_INTEGER;
71
+ return arr [i ];
72
+ }
73
+ let ans = 0 ;
74
+ const mod = 10 ** 9 + 7 ;
75
+ let stack = [];
76
+ for (let i = - 1 ; i <= n ; i ++ ) {
77
+ while (stack .length && getEle (stack [0 ]) > getEle (i )) {
78
+ const idx = stack .shift ();
79
+ ans = (ans + arr [idx ] * (idx - stack [0 ]) * (i - idx )) % mod ;
80
+ }
81
+ stack .unshift (i );
82
+ }
83
+ return ans ;
84
+ };
85
+ ```
86
+
64
87
### ** ...**
65
88
66
89
```
Original file line number Diff line number Diff line change @@ -49,6 +49,29 @@ Sum is 17.
49
49
50
50
```
51
51
52
+ ### ** TypeScript**
53
+
54
+ ``` ts
55
+ function sumSubarrayMins(arr : number []): number {
56
+ const n = arr .length ;
57
+ function getEle(i : number ): number {
58
+ if (i == - 1 || i == n ) return Number .MIN_SAFE_INTEGER;
59
+ return arr [i ];
60
+ }
61
+ let ans = 0 ;
62
+ const mod = 10 ** 9 + 7 ;
63
+ let stack = [];
64
+ for (let i = - 1 ; i <= n ; i ++ ) {
65
+ while (stack .length && getEle (stack [0 ]) > getEle (i )) {
66
+ const idx = stack .shift ();
67
+ ans = (ans + arr [idx ] * (idx - stack [0 ]) * (i - idx )) % mod ;
68
+ }
69
+ stack .unshift (i );
70
+ }
71
+ return ans ;
72
+ };
73
+ ```
74
+
52
75
### ** ...**
53
76
54
77
```
Original file line number Diff line number Diff line change
1
+ function sumSubarrayMins ( arr : number [ ] ) : number {
2
+ const n = arr . length ;
3
+ function getEle ( i : number ) : number {
4
+ if ( i == - 1 || i == n ) return Number . MIN_SAFE_INTEGER ;
5
+ return arr [ i ] ;
6
+ }
7
+ let ans = 0 ;
8
+ const mod = 10 ** 9 + 7 ;
9
+ let stack = [ ] ;
10
+ for ( let i = - 1 ; i <= n ; i ++ ) {
11
+ while ( stack . length && getEle ( stack [ 0 ] ) > getEle ( i ) ) {
12
+ const idx = stack . shift ( ) ;
13
+ ans = ( ans + arr [ idx ] * ( idx - stack [ 0 ] ) * ( i - idx ) ) % mod ;
14
+ }
15
+ stack . unshift ( i ) ;
16
+ }
17
+ return ans ;
18
+ } ;
You can’t perform that action at this time.
0 commit comments