Daily Temperatures单调栈--力扣101算法题解笔记

11.4Daily Temperatures单调栈

题目描述

给定每天的温度,求对于每一天需要等几天才可以等到更暖和的一天,如果该天之后不存在更暖和的天气,则记为0。

输入输出样例

Input :{73, 74, 75, 71, 69, 72, 76, 73}

Output:1, 1, 4, 2, 1, 1, 0, 0

题解

我们可以维持一个单调递减的栈,表示每天的温度;为了方便计算天数差,我们这里存放位置(即日期)而非温度本身。我们从左向右遍历温度数组,对于每个日期 p,如果 p 的温度比栈顶存储位置 q 的温度高,则我们取出 q,并记录 q 需要等待的天数为 p - q;我们重复这一过程,直到 p 的温度小于等于栈顶存储位置的温度(或空栈)时,我们将 p 插入栈顶,然后考虑下一天。在这个过程中,栈内数组永远保持单调递减,避免了使用排序进行比较。最后若栈内剩余一些日期,则说明它们之后都没有出现更暖和的日期。

cpp 复制代码
#include <iostream>
#include <vector>
#include <stack>

using namespace std;

// 核心算法函数
vector<int> dailyTemperatures(vector<int>& temperatures) {
    int n = temperatures.size();
    vector<int> ans(n, 0); // 初始化为0,这样栈中剩余的元素自动对应结果0
    stack<int> indices;    // 单调栈,存储下标

    for (int i = 0; i < n; ++i) {
        // 当栈不为空,且当前温度高于栈顶下标对应的温度时
        while (!indices.empty() && 
            temperatures[i] > temperatures[indices.top()]) {
            int pre_index = indices.top();
            indices.pop();
            ans[pre_index] = i - pre_index; // 计算天数差
        }
        indices.push(i); // 将当前下标压入栈
    }
    return ans;
}

// 辅助函数:打印向量
void printVector(const vector<int>& vec) {
    cout << "[";
    for (size_t i = 0; i < vec.size(); ++i) {
        cout << vec[i];
        if (i != vec.size() - 1) {
            cout << ", ";
        }
    }
    cout << "]" << endl;
}

int main() {
    // 定义输入数据
    vector<int> temperatures = { 73, 74, 75, 71, 69, 72, 76, 73 };

    cout << "Input:  {73, 74, 75, 71, 69, 72, 76, 73}" << endl;

    // 调用函数
    vector<int> result = dailyTemperatures(temperatures);

    // 输出结果
    cout << "Output: ";
    printVector(result);

    return 0;
}
相关推荐
tangguofeng10 分钟前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法
苏打豆1 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
蛋蛋的就会顺顺的2 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙2 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头
zhangfeng11333 小时前
国产GPU/AI算力芯片现状(修订完整版 · 截至2026年9月
人工智能·算法·ai编程·npu
学代码的CJY3 小时前
从代码出发理解时间复杂度与空间复杂度
数据结构·算法
白帽攻防录3 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
小O的算法实验室4 小时前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法
可乐ea5 小时前
AI Agent 工具调用准确性评测:选择错误与参数错误分开测
大数据·人工智能·算法·大模型·工具调用·ai智能体·agent评测
上位机妹子5 小时前
C 语言 数组删除指定元素(快慢指针法)
c语言·数据结构·算法