File tree Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Expand file tree Collapse file tree 1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*-------------------------------
2
+ Time Complexity: O(n)
3
+ Space Complexity: O(n)
4
+ -------------------------------*/
5
+ class Solution {
6
+ public int sumSubarrayMins (int [] arr ) {
7
+ int MOD = 1000000007 ;
8
+ int res = 0 ;
9
+ int [] extendedArr = new int [arr .length + 2 ];
10
+
11
+ for (int i = 0 ; i < arr .length ; i ++) {
12
+ extendedArr [i + 1 ] = arr [i ];
13
+ }
14
+ extendedArr [0 ] = Integer .MIN_VALUE ;
15
+ extendedArr [extendedArr .length - 1 ] = Integer .MIN_VALUE ;
16
+
17
+ Stack <int []> stack = new Stack <>(); // (index, num)
18
+
19
+ for (int i = 0 ; i < extendedArr .length ; i ++) {
20
+ while (!stack .isEmpty () && extendedArr [i ] < stack .peek ()[1 ]) {
21
+ int [] popped = stack .pop ();
22
+ int j = popped [0 ];
23
+ int m = popped [1 ];
24
+ int left = j - (stack .isEmpty () ? -1 : stack .peek ()[0 ]);
25
+ int right = i - j ;
26
+ res = (int ) ((res + (long ) m * left * right ) % MOD );
27
+ }
28
+ stack .push (new int [] { i , extendedArr [i ] });
29
+ }
30
+
31
+ return res ;
32
+ }
33
+ }
You can’t perform that action at this time.
0 commit comments