Skip to content

Commit dd2b059

Browse files
committed
feat: add typescript solution to lc problem: No.0907
No.0907.Sum of Subarray Minimums
1 parent 461eeb7 commit dd2b059

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

solution/0900-0999/0907.Sum of Subarray Minimums/README.md

+23
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,29 @@
6161

6262
```
6363

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+
6487
### **...**
6588

6689
```

solution/0900-0999/0907.Sum of Subarray Minimums/README_EN.md

+23
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,29 @@ Sum is 17.
4949

5050
```
5151

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+
5275
### **...**
5376

5477
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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+
};

0 commit comments

Comments
 (0)