Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日温度

每日温度

作者头像
大忽悠爱学习
发布于 2022-05-05 11:24:32
发布于 2022-05-05 11:24:32
99800
代码可运行
举报
文章被收录于专栏:c++与qt学习c++与qt学习
运行总次数:0
代码可运行

暴力求解法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) 
    {
        vector<int> ret;
        ret.resize(T.size(),0);
        cout << ret.size() << endl;
        for (int i = 0; i < T.size(); i++)
        {
            for (int j = i+1; j < T.size(); j++)
            {
                if (T[j] > T[i])
                {
                    ret[i] = j - i;
                    break;
                }
            }
        }
        return ret;
    }
}; 

效率低,需要时间长

单调栈解决:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) 
    {
        stack<int> s;//存放的是下标
        vector<int> ret;
        ret.resize(T.size());
        for (int i = 0; i < T.size(); i++)
        {
            //当栈不为空且当前插入元素大小大于栈顶元素的时候,将栈顶元素出栈
            while (!s.empty()&&T[i]>T[s.top()])
            {
                ret[s.top()] = i - s.top();//通过下标之差可以求得里最近的较大者的距离
                s.pop();
            }
            s.push(i);
        }
        return ret;
    }
}; 

从后开始查找:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) 
    {
        vector<int> ret;
        ret.resize(T.size());
        for (int i = T.size() - 2; i >= 0; i--)
        {
            int j = i + 1;
            while (j < T.size())
            {
                //后一个元素是否比前一个元素大,如果大,那么距离为坐标之差
                if (T[j] > T[i])
                {
                    ret[i] = j - i;//计算完当前ret[i]就可以跳出循环
                    break;
                }
                else if(ret[j]==0)//说明当前j元素后面没有比当前j指向元素更大的值
                {
                    break;
                }
                else 
                {
                    //如果后一个相邻的元素没有比当前i指向元素大,那么就需要找比后一个相邻元素大的最近位置,再次进行比较
                    j += ret[j];
                }
            }
        }
        return ret;
    }
}; 

单调栈用法:判别是否需要使用单调栈,如果需要找到左边或者右边第一个比当前位置的数大或者小

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
力扣739.每日温度
本题很容易想到的一种解法是,使用两层for循环,计算每个位置后面第一个比自己大的元素位置。代码如下:
ccf19881030
2023/04/06
2020
力扣739.每日温度
LeetCode 739. 每日温度(单调栈)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
Michael阿明
2020/07/13
3090
LeetCode 739. 每日温度(单调栈)
【算法/训练】:单调队列&&单调栈
当01100符合时,窗口外面的肯定也符合要求 注意:循环截止条件为 right < n - 1.
IsLand1314
2024/10/15
1390
【算法/训练】:单调队列&&单调栈
【代码随想录】二刷-单调栈
单调栈 739. 每日温度 // 时间复杂度:O(n) // 空间复杂度:O(n) class Solution { public: vector<int> dailyTemperatures(vector<int>& t) { stack<int>st;// 存下标 int n = t.size(); vector<int>ret(n,0); st.push(0); for(int i = 1; i < n;i++){
半生瓜的blog
2023/05/13
1630
单调栈解题模板秒杀三道算法题
单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。
labuladong
2021/09/23
4990
LeetCode 1793. 好子数组的最大分数(单调栈)
一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。一个 好 子数组的两个端点下标需要满足 i <= k <= j 。
Michael阿明
2021/09/06
4160
【leetcode刷题】T27-每日温度
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.
木又AI帮
2019/07/17
6280
C++ 线性数据结构系列之低调而强大的单调栈
单调栈是在栈基础上进行变化后的数据结构。除了遵循栈的先进后出的存储理念,在存储过程中还需保持栈中数据的有序性。
一枚大果壳
2023/08/18
3070
C++ 线性数据结构系列之低调而强大的单调栈
【LeetCode热题100】【栈】每日温度
用单调栈记录下标,先将头个温度下标压入栈,判断栈顶温度是否比当天温度低,低则更新低温的天数弹栈,高则继续压栈,这样栈里面的温度必定是递减的,一遇到温度高的便可同步更新低温的天数
叶茂林
2024/04/08
1170
PAT 1051 Pop Sequence (25分) 模拟入栈
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.
vivi
2020/07/14
5380
Leetcode 856. Score of Parentheses 括号得分(栈)
简而言之,遇到右括号就一直出栈并累加到一个值直到遇到左括号,这个累加值就表示这对括号的得分。如此周而复始到字符串结尾即可。
racaljk
2018/12/12
7210
LeetCode-739-每日温度
请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
benym
2022/07/14
1570
LeetCode 456. 132模式(逆序遍历+单调栈)
给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。 设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。
Michael阿明
2020/07/13
7450
LeetCode的第230场周赛题解
【GiantPandaCV导语】这是LeetCode的第230场周赛的题解,本期考察的知识点有暴力,搜索,贪心,单调栈等等。
BBuf
2021/03/09
3000
【题解】糟糕的一天
农夫约翰有N(N≤80000)头奶牛正在过乱头发节。每一头牛都站在同一排面朝东方,而且每一头牛的身高为
fishhh
2022/08/31
4260
【题解】糟糕的一天
C++13-STL模板-栈stack
在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/
IT从业者张某某
2023/10/16
1880
C++13-STL模板-栈stack
单调栈总结_进栈和出栈的算法思想
单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性。 假设下图是一个栈内元素的排列情况(单调递增的栈):
全栈程序员站长
2022/11/09
3420
单调栈总结_进栈和出栈的算法思想
C++STL模板库适配器之stack容器
Stl中的适配器,有栈 (stack) 队列 queue 根priority_queue 适配器都是包装了 vector list deque等顺序容器. 也可以看做是由这些容器实现的一个新的容器. 适配器没有提供迭代器.也不能同事插入或者删除多个元素.
IBinary
2019/05/25
4780
剑指offer--栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
AI那点小事
2020/04/20
3310
利用栈转换中缀表达式到后缀表达式
本篇是栈篇的最后一篇,记录一下如何用栈实现中缀表达式转后缀表达式。 先举例一个后缀表达式9 3 1 - 2 * + 5 2 / + 他的中缀表达式是9+(3-1)*2+5/2 首先我们要找到这个表达式的优先级优先级最高的是括号 其次是乘法和除法再然后是加法 那么如何用栈来演示呢。 之前那个表达式很长难以理解,我们用A+(B*C)很明显B*\C的优先级高,所以把*置后 然后 A的操作数就变成了BC*
用户7272142
2023/10/11
2480
利用栈转换中缀表达式到后缀表达式
相关推荐
力扣739.每日温度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验