#9
Monotonic Stack
Monotonic StackFor each day's temperature, report how many days until a warmer day (0 if none).
function dailyTemperatures(temperatures: number[]): number[] {
const res = new Array<number>(temperatures.length).fill(0);
const stack: number[] = []; // indices, temps decreasing down the stack
for (let i = 0; i < temperatures.length; i++) {
while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {
const j = stack.pop()!;
res[j] = i - j;
}
stack.push(i);
}
return res;
}def daily_temperatures(temperatures)
res = Array.new(temperatures.length, 0)
stack = [] # indices, temperatures decreasing down the stack
temperatures.each_with_index do |temp, i|
while !stack.empty? && temp > temperatures[stack.last]
j = stack.pop
res[j] = i - j
end
stack.push(i)
end
res
end