题意:
        根据往后 n 天的天气预报,计算每一天需要等待几天才会出现一次更高的气温,如果往后都没有更高的气温,则用 0 补位。
        例如往后三天的气温是 [1,2,3] , 则输出 [1,1,0]。


方法一:
单调栈

思路:
        题意核心:以当前值为例,找出右边第一个比当前值大的数,并计算出两者的距离。(明显的单调栈题型)

        1.因为要找出之前的数要比当前值大,而之前的数又是右边的数,因此要从右往左遍历数组;
        2.因为要计算两者相差的距离,所以初始化栈,栈存储数的下标;
        3.逆向遍历数组,如果栈非空并且栈顶元素<=当前遍历的值,则弹栈;
        4.最后,反转答案数组。


        

class Solution {
public:
    
    vector<int> temperatures(vector<int>& dailyTemperatures) {
        int n=dailyTemperatures.size();
        stack<int> st;//初始化栈,存储值的下标
        vector<int> res;
        
        for(int i=n-1;i>=0;i--){//逆序遍历
            //如果栈非空并且栈顶元素<=当前遍历的值,则弹栈
            while(!st.empty()&&dailyTemperatures[st.top()]<=dailyTemperatures[i]){
                st.pop();
            }
            res.push_back(st.empty()?0:st.top()-i);//计算相差的距离
            st.push(i);//下标入栈
        }
        reverse(res.begin(),res.end());//反转答案数组
        return res;
    }
};


时间复杂度:
空间复杂度:

方法二:
暴力

思路:
        二重循环遍历数组。
        外层循环以每个数作为基准,内层循环遍历数组寻找右边比当前值大的数。
        如果找得到,则计算两者下标之差;
        否则,添加0。
        

class Solution {
public:
    
    vector<int> temperatures(vector<int>& dailyTemperatures) {
        int n=dailyTemperatures.size();
        vector<int> res;
        int flag;
        for(int i=0;i<n;i++){
            flag=0;
            for(int j=i+1;j<n;j++){
                if(dailyTemperatures[i]<dailyTemperatures[j]){//寻找右边比当前值大的数
                    res.push_back(j-i);//计算下标之差
                    flag=1;
                    break;
                }
            }
            if(flag==0){//右边没有比当前值大的数,添加0
                res.push_back(0);
            }
        }
        return res;
    }
};


时间复杂度:
空间复杂度: