Count Number of Nice Subarrays LeetCode solution in JavaScript

1
/**
2
* @param {number[]} nums
3
* @param {number} k
4
* @return {number}
5
*/
6
var numberOfSubarrays = function (nums, k) {
7
const len = nums.length;
8
const pre = new Array(len).fill(-1);
9
const post = new Array(len).fill(len);
10

11
let lastOcc = -1;
12
for (let i = 0; i < len; i++) {
13
pre[i] = lastOcc;
14
if (nums[i] & 1) lastOcc = i;
15
}
16
lastOcc = len;
17
for (let i = len - 1; i >= 0; i--) {
18
post[i] = lastOcc;
19
if (nums[i] & 1) lastOcc = i;
20
}
21

22
let l = 0,
23
r = 0,
24
oddCount = 0;
25

26
let ans = 0;
27

28
for (; r < len; r++) {
29
while (l < len && !(nums[l] & 1)) l++;
30
if (nums[r] & 1) oddCount++;
31

32
if (oddCount == k) {
33
let leftCount = l - pre[l];
34
let rightCount = post[r] - r;
35
ans += leftCount * rightCount;
36

37
oddCount--;
38
l++;
39
}
40
}
41

42
return ans;
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0