什么是单调栈?

单调栈,栈内顺序要么从大到小 要么从小到大。

一:739. 每日温度


解题思路:

遍历每日温度,维护一个单调栈,若栈为空或者当日温度小于、等于栈顶温度,则直接入栈;反之若当日温度大于栈顶温度,说明栈顶元素的升温日已经找到了,则将栈顶元素出栈,计算其与当日相差的天数即可。

注意:题目要求返回的是升温的天数,而不是升温的温度,因此栈中保存的应是数组的下标,而非温度。

代码:

class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] result = new int[temperatures.length];Stack<Integer> stack = new Stack();for(int i = 0;i<temperatures.length;i++) {while (!stack.isEmpty() && temperatures[i]>temperatures[stack.peek()]) {// 栈里面保存的下标对应的温度是从大到小排序的int index = stack.pop();result[index] = i - index;}stack.push(i);}return result;}
}

二:496. 下一个更大元素 I


解题思路:

利用 Stack、HashMap解决:
1、先遍历大数组nums2,首先将第一个元素入栈;
2、继续遍历,当当前元素小于栈顶元素时,继续将它入栈;当当前元素大于栈顶元素时,栈顶元素出栈,此时应将该出栈的元素与当前元素形成key-value键值对,存入HashMap中;
3、当遍历完nums2后,得到nums2中元素所对应的下一个更大元素的hash表;
4、遍历nums1的元素在hashMap中去查找‘下一个更大元素’,当找不到时则为-1。

代码:

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int[] res = new int[nums1.length];Stack<Integer> stack = new Stack(); Map<Integer,Integer> map = new HashMap();for (int num:nums2) {while(!stack.isEmpty() && num>stack.peek()) {map.put(stack.pop(),num);}stack.push(num);}for(int i = 0; i<nums1.length; i++){res[i] = map.getOrDefault(nums1[i],-1);} return res;}
}

LeetCode 单调栈练习题归纳总结相关推荐

  1. leetcode 739. 每日温度 单调栈解法和暴力法及其优化 c代码

    如题: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高, 请在该位置用 0 来代替.例如,给定一个列表 temperature ...

  2. leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)

    题目 https://leetcode.com/problems/sliding-window-maximum/ 题解 窗口内最大最小值更新结构,单调栈问题,左神视频讲过,<程序员算法面试指南& ...

  3. leetcode 907. Sum of Subarray Minimums | 907. 子数组的最小值之和(单调栈)

    题目 https://leetcode.com/problems/sum-of-subarray-minimums/ 题解 单调栈问题.参考左神算法课:https://ke.qq.com/webcou ...

  4. leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)

    题目 https://leetcode.com/problems/count-submatrices-with-all-ones/ 题解 本题与 leetcode 84. Largest Rectan ...

  5. leetcode 581. Shortest Unsorted Continuous Subarray | 581. 最短无序连续子数组(单调栈)

    题目 https://leetcode.com/problems/shortest-unsorted-continuous-subarray/ 题解 乍一看,没思路,直奔 Related Topics ...

  6. leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)

    题目 https://leetcode.com/problems/maximal-rectangle/ 题解 本题与 leetcode 84. Largest Rectangle in Histogr ...

  7. leetcode 84. Largest Rectangle in Histogram | 84. 柱状图中最大的矩形(单调栈)

    题目 https://leetcode.com/problems/largest-rectangle-in-histogram/ 题解 一句话总结:遍历数组,对于每个height[i],以其自身的高度 ...

  8. leetcode 496, 503, 556. Next Greater Element I, II, III | 496, 503, 556. 下一个更大元素 I,II,III(单调栈)

    496. Next Greater Element I https://leetcode.com/problems/next-greater-element-i/ 单调栈问题,参考:https://l ...

  9. leetcode 435. Non-overlapping Intervals | 435. 无重叠区间(单调栈)

    题目 https://leetcode.com/problems/non-overlapping-intervals/ 题解 我一开始是没有 get 到这道题的精髓的.只是在想,用贪心法,当两个 (a ...

  10. leetcode 402. Remove K Digits | 402. 移掉 K 位数字(单调栈)

    题目 https://leetcode.com/problems/remove-k-digits/ 题解 本题考察对问题的抽象能力,多写几个例子可以发现,这是一个单调栈问题,维护一个单调不减栈. cl ...

最新文章

  1. “剁手”的第十年,AI加持下的快递速度你还满意吗?
  2. apache 定义日志格式 及日志记录
  3. 海量数据选取重复次数最多的n个
  4. 从ABAP Netweaver的SICF到SAP Kyma的Lambda Function
  5. 哪个是python程序中与缩进有关的正确说法_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()。_学小易找答案...
  6. unity如何往下挖地形_Unreal Engine地形系统辨析(一)
  7. HTML 5 input placeholder 属性
  8. 0day影响 Chrome和 Safari,谷歌不修复
  9. 页面加载中的css,JS+CSS实现网页加载中的动画效果
  10. 微信小程序学习日记---模板(template)全解析
  11. 在Android上实现汉字笔顺动画效果
  12. 在linux系统下如何下载中文输入法,如何在linux系统下安装中文输入法
  13. k3 cloud oracle,调试K3Cloud的管理中心未能加载Oracle问题
  14. python中的def是什么意思啊_python的def是什么意思
  15. T检验与F检验的区别_f检验和t检验的关系
  16. 1+X 网络系统 建设与运维(中级)实验
  17. 2022-2028年中国燃气轮机行业市场专项调研及投资前景研究报告
  18. 安卓产品方案开发广告机案例
  19. 论文笔记 Stochastic Gradient Hamiltonian Monte Carlo (SGHMC)
  20. 前端项目的总结——为什么要组件化?

热门文章

  1. 饥饿的小易(BFS问题)
  2. response.getStatusCode()==200什么意思
  3. 静候Google I/O 2014大会开幕
  4. super-csv文档的部分翻译及基本使用
  5. Craw the data of the web page and parse to pdf
  6. 华为交换机不同VLAN间通信的两种主流解决方案,一分钟快速掌握
  7. codeforces1100 F. Ivan and Burgers(线性基)
  8. Elasticsearch:如何在聚合时选择所需要的 bucket 并进行可视化
  9. 【无代码体验】宜搭车辆管理系统模板试用
  10. scikit-learn初级