Skip to content

Commit ee51d06

Browse files
authored
Update 795-number-of-subarrays-with-bounded-maximum.js
1 parent 4e4214f commit ee51d06

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

795-number-of-subarrays-with-bounded-maximum.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,52 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} left
4+
* @param {number} right
5+
* @return {number}
6+
*/
7+
const numSubarrayBoundedMax = function(nums, left, right) {
8+
const n = nums.length;
9+
let res = 0
10+
const preLargerOrEqual = Array(n).fill(-1)
11+
const postLarger = Array(n).fill(n)
12+
let stk = []
13+
stk.push(0)
14+
for(let i = 1; i < n; i++) {
15+
const e = nums[i]
16+
while(stk.length && nums[stk[stk.length - 1]] < e) {
17+
stk.pop()
18+
}
19+
if(stk.length) {
20+
preLargerOrEqual[i] = stk[stk.length - 1]
21+
}
22+
stk.push(i)
23+
}
24+
stk = []
25+
stk.push(n - 1)
26+
for(let i = n - 2; i >= 0; i--) {
27+
const e = nums[i]
28+
while(stk.length && nums[stk[stk.length - 1]] <= e) {
29+
stk.pop()
30+
}
31+
if(stk.length) {
32+
postLarger[i] = stk[stk.length - 1]
33+
}
34+
stk.push(i)
35+
}
36+
for(let i = 0; i < n; i++) {
37+
const e = nums[i]
38+
if(e >= left && e <= right) {
39+
const pre = preLargerOrEqual[i]
40+
const post = postLarger[i]
41+
res += (i - pre) * (post - i)
42+
}
43+
}
44+
45+
return res
46+
};
47+
48+
// another
49+
150
/**
251
* @param {number[]} nums
352
* @param {number} left

0 commit comments

Comments
 (0)