Count Subarrays Where Max Element Appears at Least K Times

MediumArraySliding Window

Solution

export function countSubarrays(nums: number[], k: number): number {
  const maxElement = nums.reduce((max, num) => (max < num ? num : max), 0);
 
  let answer = 0;
  let count = 0;
  let start = 0;
  for (let end = 0; end < nums.length; end++) {
    count += nums[end] === maxElement ? 1 : 0;
    while (k <= count) {
      count -= nums[start] === maxElement ? 1 : 0;
      start += 1;
    }
    answer += start;
  }
  return answer;
}