Maximum Score of a Good Subarray

HardArrayTwo PointersBinary SearchStackMonotonic Stack

Solution

export function maximumScore(nums: number[], k: number): number {
  const n = nums.length;
  let [start, end] = [k, k];
  let answer = nums[k];
  let minValue = nums[k];
 
  while (0 < start || end < n - 1) {
    if (start === 0 || (end < n - 1 && nums[start - 1] < nums[end + 1])) {
      end += 1;
    } else {
      start -= 1;
    }
    minValue = Math.min(minValue, nums[start], nums[end]);
    answer = Math.max(answer, minValue * (end - start + 1));
  }
 
  return answer;
}