import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 每日温度
     * @param dailyTemperatures int整型一维数组 
     * @return int整型一维数组
     */
    public int[] temperatures (int[] dailyTemperatures) {
        ArrayDeque<Integer> st = new ArrayDeque<>();
        int[] res = new int[dailyTemperatures.length];
        for(int i = dailyTemperatures.length-1; i >= 0; i--){
            //如果当前元素大于栈内元素,将它们出栈
            while(!st.isEmpty() && dailyTemperatures[st.peek()] <= dailyTemperatures[i])
                st.pop();
            //如果当前元素小于栈内元素,则记录栈顶元素作为结果
            if(!st.isEmpty() && dailyTemperatures[st.peek()] > dailyTemperatures[i])
                res[i] = st.peek() - i;
            //如果栈空,则说明没有更大的元素
            if(st.isEmpty())
                res[i] = 0;
            st.push(i);
        }
        return res;

    }
}