6Luffy6

导航

739. Daily Temperatures

传送锚点:

. - 力扣(LeetCode)

Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.

Example 1:

Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]

Example 2:

Input: temperatures = [30,40,50,60]
Output: [1,1,1,0]

Example 3:

Input: temperatures = [30,60,90]
Output: [1,1,0]

Constraints:

  • 1 <= temperatures.length <= 105

  • 30 <= temperatures[i] <= 100

从前往后遍历思路

一开始我们初始化答案数组,赋值为0

我们开一个栈,栈类型为pair<int, int>,从前往后遍历,如果当前栈为空 或者 遍历的温度小于等于栈顶温度,则加入栈,

如果栈顶温度小于遍历温度,不断判断栈内元素,直到栈为空或者栈顶温度大于等于遍历温度,弹出符合条件的栈顶元素,
遍历完最后加入栈中

Code

typedef pair<int, int> pii;
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        stack<pii> st; // 第一个节点存储下标 第二个节点存储温度
        vector<int> ans(temperatures.size(), 0);
        for (int i = 0; i < temperatures.size(); i++) {
            if (st.empty() || temperatures[i] <= st.top().second) {
                st.push(pii(i, temperatures[i]));
            } else { // 当前遍历的温度大于栈顶温度
                //继续遍历
                while(st.size() && temperatures[i] > st.top().second){
                    pii p = st.top();
                    st.pop();
                    ans[p.first] = i - p.first;
                }
                st.push(pii(i, temperatures[i]));
            }
        }
        return ans;
    }
};

从后往前遍历思路

一开始我们初始化答案数组,赋值为0

我们开一个栈,栈类型为pair<int, int>,从后往前遍历,若栈内存在元素 并且 当前遍历的温度大于等于栈顶温度,栈顶元素弹出,直到栈顶为空 或者 遍历温度小于栈顶,

遍历温度小于栈顶(栈不为空),更新ans数组,

入栈

Code

typedef pair<int, int> pii;
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        stack<pii> st; // 第一个节点存储下标 第二个节点存储温度
        vector<int> ans(temperatures.size(), 0);
        //从后往前遍历
        for (int i = temperatures.size() - 1; i >= 0; i--) {
            while(st.size() && temperatures[i] >= st.top().second){
                st.pop();
            }
            if(!st.empty()){
                ans[i] = st.top().first - i;
            }
            st.push(pii(i, temperatures[i]));
         
        }
        return ans;
    }
};

posted on 2024-07-25 14:24  不AC不睡觉  阅读(3)  评论(0编辑  收藏  举报