Skip to main content

2962.js

/** ------------------------------------------------------------------------------
*
* 2962. Count Subarrays Where Max Element Appears at Least K Times
* Topics: Sliding Window
* https://leetcode.com/problems/count-subarrays-where-max-element-appears-at-least-k-times/description/?envType=daily-question&envId=2025-04-29
*
------------------------------------------------------------------------------ */
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var countSubarrays = function (nums, k) {
let max = 0
let maxCount = 0
let result = 0
let leftNear = 0

for (let i = 0; i < nums.length; i++) {
let num = nums[i]
if (num > max) {
max = num
maxCount = 1
result = 0
leftNear = 0
} else if (num === max) {
maxCount++
}

if (maxCount < k) {
continue
}

while (maxCount !== k || nums[leftNear] !== max) {
if (nums[leftNear] === max) {
maxCount--
}

leftNear++
}

result += leftNear + 1
}

return result
}

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