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))