Daily Temperatures

MediumArrayStackMonotonic Stack

Solution

import { range } from '@algorithm/lib';
 
export function dailyTemperatures(temperatures: number[]): number[] {
  const n = temperatures.length;
 
  const stack: number[] = [];
  const answer = new Array<number>(n).fill(0);
 
  for (const day of range(n)) {
    while (0 < stack.length && temperatures[stack[stack.length - 1]] < temperatures[day]) {
      const lastDay = stack.pop();
      if (lastDay !== undefined) {
        answer[lastDay] = day - lastDay;
      }
    }
    stack.push(day);
  }
 
  return answer;
}