leetcode739. 每日温度 单调栈

这篇具有很好参考价值的文章主要介绍了leetcode739. 每日温度 单调栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自己思路:

想到用两个栈,一个维护元素、另一个维护下标。但是还是无法处理有重复元素的问题(用哈希表来存储的时候)。所以就看了答案的思路。

答案思路:

从前往后遍历,维护一个单调栈。栈存放数组的下标。

①栈为空 or 当前下标元素 <= 栈顶元素,入栈;

②当前下标元素 > 栈顶元素,就出栈,并计算它们的下标之差,存入到这个出栈元素对应的数组里面。

代码:

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size();
        vector<int> ans(n);	// 设置存放当前下标温度之后的几天可以遇到高温度
        stack<int> st;	// 单调栈,用来存放元素下标
        int i = 0;
        while( i != temperatures.size()) {
            int t = temperatures[i];  // 获取当前下标元素
            // 如果栈为空 or t<= 栈顶元素,就入栈,并把指针后移
            if(st.empty() || t <= temperatures[st.top()]){
                st.push(i);
                i++;
            }
            // 如果 t>栈顶元素,那么就是栈顶这个温度找到了比它高的温度,出栈栈顶元素并计算它们之间的间隔天数,存入到与栈顶元素相关的数组中。
            else if (t > temperatures[st.top()]) {
                int loc = st.top();
                st.pop();
                ans[loc] = i - loc;
            }
        }
        return ans;
    }
};

运行结果:

leetcode739. 每日温度 单调栈,LeetCode,java,数据结构,算法

 文章来源地址https://www.toymoban.com/news/detail-673537.html

到了这里,关于leetcode739. 每日温度 单调栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode:每日温度---单调栈

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

    2024年01月25日
    浏览(55)
  • 代码随想录 739. 每日温度

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

    2024年01月18日
    浏览(35)
  • 【LeetCode每日一题】单调栈 402 移掉k位数字

    402. 移掉 K 位数字 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k **位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 如果有 m+1 位数字,S1 a 0 a 1 a 2 . . . . a m a_0a_1a_2....a_m a 0 ​ a 1 ​ a 2 ​ .... a m ​ 需要去掉n位数字,

    2024年02月20日
    浏览(34)
  • (单调栈) 496. 下一个更大元素 I——【Leetcode每日一题】

    难度:简单 nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中 nums1 是 nums2 的子集。 对于每个 0 = i nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums

    2024年02月08日
    浏览(41)
  • Leetcode 剑指 Offer II 038. 每日温度

    题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的

    2024年02月14日
    浏览(46)
  • LeetCode每日一题 1019. 链表中的下一个更大节点 --单调栈

      Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接       我会一直往里填充内容哒! 🌈LeetCode专栏:专栏链接       目前在刷初级算法的LeetBook 。若每日一题当中有力所能

    2024年02月01日
    浏览(72)
  • leetcode316. 去除重复字母(单调栈 - java)

    难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s = “bcabc” 输出:“abc” 示例 2: 输入:s = “cbacdcbc” 输出:“acdb”

    2024年02月10日
    浏览(41)
  • 【LeetCode】每日一题 -- 1240. 铺瓷砖 -- Java Version

    题目链接 :https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares/ 23.05.31 华为机试第二题 NP-Complete 问题 题解参考:Java DFS暴力递归(详细注释) … 题解思路 : 检查当前答案是否大于等于当前最佳答案,若是,则进行剪枝,回溯 检查正方形中是否有空位,若无空位,更新

    2024年02月08日
    浏览(34)
  • 单调栈【leetcode】

    笔记:代码随想录 单调栈:需要自己维持顺序,没有现成容器可以用。 1.每日温度 单调栈使用规则: 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了 。时间复杂度为O(n)。空间复杂度O(n)。 本质:空

    2024年02月03日
    浏览(30)
  • 【单调栈】LeetCode1776:车队

    【贪心算法】【中位贪心】.执行操作使频率分数最大 单调栈分类、封装和总结 在一条单车道上有 n 辆车,它们朝着同样的方向行驶。给你一个长度为 n 的数组 cars ,其中 cars[i] = [positioni, speedi] ,它表示: positioni 是第 i 辆车和道路起点之间的距离(单位:米)。题目保证

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包