Daily Temperatures

739. Daily Temperatures

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.

For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].

Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].

1.解析

题目大意,给出每天的温度列表,求解当天温度经过多少天之后温度升高。

2.分析

本身这道题不是很难,最容易想到的解法是:根据当前的温度,从下一个位置开始,依次遍历往后的温度,如果存在一项比当前的温度高,将两者的位置差保存下来;否则,保存0。但这种解法的时间复杂度为O\left ( n^{^{2}} \right )。所以,本题的难点就在于如何避免重复的扫描,我想到的解法是利用单调栈(里面的温度保证是递减的)将遍历到的温度保存在栈里面,当遍历下一个时,跟栈顶元素进行比较,如果大于栈顶温度,说明比栈顶温度大的就是该温度,将两者的位置差保存下来;如果不必栈顶温度大,说明不存在。

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T){
        int n = T.size();
        vector<int> res(n, 0);
        stack< pair<int, int> > s; //栈中的温度是递减的
        for (int i = 0; i < n; ++i){
            while (!s.empty() && s.top().first < T[i]){ //跟栈顶温度比较,若大于,则当天即为栈顶温度的气温升高日期
                int pos = s.top().second;
                res[pos] = i - pos; //两者的位置差,即相隔的时间
                s.pop();
            }
            s.push({T[i], i});
        }
        
        return res;
    }
};

3.类似的题目

Next Greater Element II(本题的简化版)

内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值