稀碎从零算法笔记Day32-LeetCode:每日温度

算是引出“单调栈”这种数据结构,后面会用这个思想处理下接雨水问题

前言:单调栈模式匹配——题目中提到“求第一个最大/最小的元素”

题型:栈、单调栈、数组

链接:739. 每日温度 - 力扣(LeetCode)

来源:LeetCode

题目描述

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

题目样例

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]

提示:

  • 1 <= temperatures.length <= 105
  • 30 <= temperatures[i] <= 100

题目思路

单调栈,对栈内元素有要求的栈:要求栈内元素【从栈顶到栈底】单调递增/递减。这就对入栈元素有了要求。

明确这一点再看题目:不难想到直接暴力法——两个for循环,找到第一个比temperatures[i]的元素temperatures[j],将 j-i 存入到原数组即可。但N^2的时间复杂度一多就超时(而且今天我们要学习新的数据结构)。

如果使用单调栈:那么可以通过判断 temperatures[stack.top()] 和 temperatures[i] 的大小关系决定操作:如果 T[top] 比 T[i] 大或者相等,那就将 i 压入到栈中(这边栈内存的是index)。如果T[i] 更大,那就弹出top,ans[top] = i - top (当然先赋完值再pop) 

最终返回 ans 数组即可

C++代码

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        // 单调栈:求左面/右面 第一个比当前元素大/小的元素
        // 保证栈内元素下标:栈顶->栈底是递增的
        stack<int> st;
        int len =  temperatures.size();
        vector<int> ans(len,0);
        st.push(0); //将index压入栈 比较栈顶元素 和 temperatures[i]的大小
        for(int i=1;i<len;i++)
        {
            // st内存的是index
            while(!st.empty()&& temperatures[i] > temperatures[st.top()])
            {
                ans[st.top()] = i - st.top();
                st.pop();
            }
            if(st.empty() || temperatures[i] <= temperatures[st.top()])
                st.push(i);
        }
        return ans;
    }
};

结算页面

相关推荐

  1. 算法笔记Day40-LeetCode:加油站

    2024-03-29 09:32:01       41 阅读
  2. 算法笔记Day31-LeetCode:接雨水

    2024-03-29 09:32:01       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 09:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 09:32:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 09:32:01       82 阅读
  4. Python语言-面向对象

    2024-03-29 09:32:01       91 阅读

热门阅读

  1. 网络安全产品之认识4A统一安全管理平台

    2024-03-29 09:32:01       38 阅读
  2. 数据分析-GroupBy的排序和缺失值处理

    2024-03-29 09:32:01       39 阅读
  3. 实现简易的 axios

    2024-03-29 09:32:01       46 阅读
  4. 毛细管制冷系统的设计要点

    2024-03-29 09:32:01       36 阅读