Skip to main content

1248.js

/** ------------------------------------------------------------------------------
*
* 1248. Count Number of Nice Subarrays
* Topics: Sliding Window
* https://leetcode.com/problems/count-number-of-nice-subarrays/description/
*
------------------------------------------------------------------------------ */
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
// Time out
// var numberOfSubarrays = function (nums, k) {
// const n = nums.length

// let result = 0

// for (let i = 0; i < n; i++) {
// let j = i
// let odd = 0
// // let even = 0

// while (j < n) {
// // if (nums[j] % 2 === 0) {
// // even++
// // }

// if (nums[j] % 2 === 1) {
// odd++
// }

// if (odd > k) break

// if (odd === k) {
// result += 1
// }
// j++
// }
// }

// return result
// }

var numberOfSubarrays = function (nums, k) {
let odd = 0
let result = 0
const map = new Map()
map.set(0, 1)

for (let num of nums) {
if (num % 2 === 1) {
odd++
}
if (map.has(odd - k)) {
result += map.get(odd - k)
}
map.set(odd, (map.get(odd) || 0) + 1)
}

return result
}

console.log(numberOfSubarrays([1, 1, 2, 1, 1], 3))
console.log(numberOfSubarrays([2, 2, 2, 1, 2, 2, 1, 2, 2, 2], 2))