Maximum Width Ramp

MediumArrayTwo PointersStackMonotonic Stack

Solution

export function maxWidthRamp(nums: number[]): number {
  const n = nums.length;
  const stack: number[] = [];
  for (let i = 0; i < n; i++) {
    if (stack.length === 0 || nums[i] < nums[stack[stack.length - 1]]) {
      stack.push(i);
    }
  }
 
  let answer = 0;
  for (let i = n - 1; 0 <= i; i--) {
    while (0 < stack.length && nums[stack[stack.length - 1]] <= nums[i]) {
      answer = Math.max(answer, i - stack.pop()!);
    }
  }
  return answer;
}

Complexity

  • Time: O(N)
  • Space: O(N)