码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 739. 每日温度

时间:2020-04-14 23:07:14      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:str   题解   ade   public   amp   problems   tac   contain   lock   

1. 问题描述

(LeetCode 739. 每日温度)[https://leetcode-cn.com/problems/daily-temperatures/]

2. 问题分类

  • 栈(单调栈)

3. 问题解析

Reference: https://leetcode-cn.com/problems/daily-temperatures/solution/mei-ri-wen-du-by-leetcode/

  • 假设T[0]=10; T[10]=20; T[20]=20;则T[20]不会是T[0]答案
  • 假设T[0]=10; T[10]=10; T[20]=20;则T[20]可能是T[0]答案

3.1 算法思想

  1. 从数组末尾依次遍历至数组首部,维护一个单调栈(存储数组元素下标)
  2. 若!st.empty()&&T[i]>=T[stack.top()],则一直执行pop(),此处必须是>=,因为温度相等不能算提升,因此需要pop()
  3. 若栈为空则为0,否则为stack.top()-i
  4. 将新的数组下标入栈

3.2 举个栗子

t=[73,74,75,71,69,72,76,73]

  1. 当 i = 7,ans[i] = 0,stack = [7 (73)]。
  2. 当 i = 6,pop(), ans[i] = 0, stack = [6 (76)]。
  3. 当 i = 5,ans[i] = 1, stack = [5 (72), 6 (76)]。
  4. 当 i = 4,ans[i] = 1, stack = [4 (69), 5 (72), 6 (76)]。
  5. 当 i = 3,pop(),ans[i] = 2, stack = [3 (71), 5 (72), 6 (76)]。
    ……

4. 算法实现

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        if(T.empty())   return {};
        stack<int> st;
        vector<int> res(T.size(),0);
        for(int i=T.size()-1;i>=0;i--)
        {
            while(!st.empty()&&T[st.top()]<=T[i])    st.pop();
            res[i]=st.empty()?0:st.top()-i;
            st.push(i);
        }
        return res;
    }
};

LeetCode 739. 每日温度

标签:str   题解   ade   public   amp   problems   tac   contain   lock   

原文地址:https://www.cnblogs.com/HurryXin/p/12701612.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!