| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 一道Medium,两道Hard带你刷爆力扣单调栈(模板解题,学不会来捶我,建议收藏) -> 正文阅读 |
|
[数据结构与算法]一道Medium,两道Hard带你刷爆力扣单调栈(模板解题,学不会来捶我,建议收藏) |
Preface继上篇【面试高频】详解单调栈,今天我们来讲述一下如何用我给出的单调栈模板刷题。 所谓单调栈其实就是栈内元素具有单调性, 常用于解决 我们会讲一下其中最具代表性的三道题,其中一道Medium,两道Hard,保证你看完一定有所收获:
739. 每日温度DescriptionSimulation思路:我们先列一个表格分析一下示例数据是怎么来的
首先想到的当然是暴力解法,两层
题目中要求计算下一个更高的温度的天数差,其实就是要找到自己右边第一个比自己大的元素, 然后计算下标之差。 很明显要用到一个单调减(栈头元素最小)的栈,通过O(n)的时间复杂度(即遍历一遍)就能找到每个元素的右边第一个比它大的元素,本质就是空间换时间。
既然已经分析出要用单调栈,我们可以直接把三板斧(模板)使出来:
在脑中模拟一下出入栈的过程:
从第二步就可以看出来,我们需要在栈内元素出栈前通过下标计算天数差,增加一行即可:
Solution完整代码如下,可以尝试一下,原题链接:
总结一下解题过程:
42. 接雨水DescriptionSimulation思路:
首先明确一下单调栈里到底要存什么内容,每个柱的高度?不不不!我们需要下标来计算宽度,而下标又可以直接get到对应的高度,所以只需一个单调栈来存储下标就可以了。 画了一张图进行模拟计算过程,一组数
看完模拟过程,相信你已经有了思路,单调减的栈,三板斧一整,我们只需要在出栈的时候计算面积即可。下面给出完整代码 🍉🍉🍉 Solution
84. 柱状图中最大的矩形DescriptionSimulation思路分析:
但这样就足够了吗?显然不行,设想两种情况:
其实解决方法很简单,我们只要在数组前后各加一个0就可以了。0一定是最小元素,在前面加一个0不用担心栈空的情况,每次出栈都计算一下面积;没有出栈条件就创造出栈条件,所以在数组后面加一个0。
Solution完整代码如下:
Conclusion复习一下解题过程:
可以看到最大矩形面积这道题跟接雨水虽然相似,但麻烦了许多,特殊值的输入给我们的解题思路带来了一定困扰,不过你不能指望Hard题都是套个模板就能AC的。 虽然三板斧很好用,但一些特殊条件的计算仍然是需要你自己的判断,那么问题来了:怎么提高自己的能力? 刷题!刷题!还是TMD刷题!!!🍗🍗 写文不易,求个赞 💗💗 可以点个关注互相交流~ 我是Mancuoj,更多有趣文章:我的个人主页 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:51:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |