当前位置: 首页 > article >正文

【LeetCode】739.每日温度

目录

  • 题目描述
  • 输入输出示例及数据范围
  • 思路:单调栈
  • C++ 实现

题目描述

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

输入输出示例及数据范围

在这里插入图片描述

思路:单调栈

我们当然可以使用暴力求解的方式解决这道题,但是更优的做法是使用单调栈。具体来说,单调栈当中存储的是原数组的下标,并满足栈顶元素(下标)对应到原数组当中的值在栈中是最大的。

我们从头开始对 temperatures 数组进行遍历,并在遍历的过程中维护整个单调栈。对于第i个元素,我们首先不断地取栈顶的下标prev对应的元素temperatures[prev]temperatures[i]比较大小,如果前者比后者小,那么说明prev 这个下标对应的这一天找到了与它最近且问题比它高的那一天,prev这一天的答案就是i - prev。不断地比较直至栈清空或是temperatures[prev]不比temperatures[i]小,此时将i入栈即可。

C++ 实现

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size();
        vector<int> ans(n, 0);
        stack<int> st;
        for(int i=0; i<n; i++) {
            while(!st.empty() && temperatures[st.top()] < temperatures[i]) {
                int prev = st.top();
                ans[prev] = i - prev;
                st.pop();
            }
            st.push(i);
        }
        return ans;
    }
};

http://www.kler.cn/a/567637.html

相关文章:

  • 算法实战练习
  • 小红书湖仓架构的跃迁之路
  • 在日常工作中,有一块新磁盘,如何扩容到vm中,具体命令是什么?
  • Python----数据分析(Numpy:安装,数组创建,切片和索引,数组的属性,数据类型,数组形状,数组的运算,基本函数)
  • Spring Framework测试工具MockMvc介绍
  • 使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法
  • Unity3D仿星露谷物语开发30之保存场景状态
  • Compose 手势处理,增进交互体验
  • Python实现GO鹅优化算法优化BP神经网络回归模型项目实战
  • 网络空间安全(6)web应用程序技术
  • 抽象工厂模式:思考与解读
  • java项目之基于ssm的学籍管理系统(源码+文档)
  • 实例分割 | yolov11训练自己的数据集
  • 【Java】Stream API
  • Ollama的底层实现原理分析
  • 【多模态大模型论文精读】MOSHI:双工实时语音对话大模型
  • 网络变压器的主要电性参数与测试方法(2)
  • 【Redis】Redis 入门
  • 《基于鸿蒙系统的类目标签AI功能开发实践》
  • 基于PLC的智能窗控制系统设计