码迷,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 = 7ans[i] = 0,stack = [7 (73)]
  2. i = 6pop(), ans[i] = 0, stack = [6 (76)]
  3. i = 5ans[i] = 1, stack = [5 (72), 6 (76)]
  4. i = 4ans[i] = 1, stack = [4 (69), 5 (72), 6 (76)]
  5. i = 3pop(),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
迷上了代码!