import java.util.Stack;
import java.util.Arrays;
class Program {
private static int[] number_of_days_needed_to_wait_to_get_warmer(int[] temperatures) {
Stack<Integer> stk = new Stack();
int size = temperatures.length;
int result[] = new int[size];
for (int i = 0; i < size; i++) {
while (stk.size() > 0 && temperatures[i] > temperatures[stk.peek()]) {
result[stk.peek()] = i - stk.pop();
}
stk.push(i);
}
return result;
}
public static void main(String[] args) {
int[] temperatures = {82, 84, 81, 58, 85, 89, 75, 71};
int[] result = number_of_days_needed_to_wait_to_get_warmer(temperatures);
System.out.println(Arrays.toString(result));
// 82 -> 84 = 1
// 84 -> 81 -> 58 -> 85 = 3
// 81 -> 58 -> 85 = 2
// 58 -> 85 = 1
// 85 -> 89 = 1
// 89 -> 75 -> 71 = 0
// 75 -> 71 = 0
}
}
/*
run:
[1, 3, 2, 1, 1, 0, 0, 0]
*/