当前位置: 首页 > news >正文

代码随想录LeetCode | 单调栈问题

前沿:撰写博客的目的是为了再刷时回顾进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。

预:看到题目后的思路和实现的代码。

见:参考答案展示。

感思:对比答案后的思考,与之前做过的题目是否有关联。

行:

(1)对于没做出来的题目,阅读答案后重新做一遍;

(2)下次做题可以尝试改善的方向;

(3)有助于理解的相关的题目

优先级:做题进度>学习&总结>默写回顾>做题数量

题目回顾

1.739. 每日温度

题目链接:739. 每日温度

思路

二刷:有使用单调栈的思路,但实现时发现小于等于时不会比较,若一个个比较排序则很低效。

  • 当时想错了,小于等于时直接放进去即可,这样放进去肯定是栈顶到栈底从小到大的顺序。

因为是只需要获取大于当前元素的下一个下标与当前下标的位置差,所以栈只需存储下标值。

当前遍历到的值>栈顶下标对应值时,则表示栈顶下标对应值遇到了比它大的下一个最大值。

  • 此时将通过临时变量i存储栈顶下标。
    • j-i+1:表示比它大的下一个最大值位置差。
  • 并且要考虑栈内其他元素是否小于当前遍历到的值,所以要使用while循环比较。
    • 要注意给i传送新的栈顶下标值,才能更新比较变量。

而小于等于的情况,上面提到了,只需要直接放进去即可。

class Solution {public int[] dailyTemperatures(int[] temperatures) {// 寻找下一个大于值Deque<Integer> deque = new LinkedList();int len = temperatures.length;int[] result = new int[len];deque.push(0);for(int j = 1;j < len;j++){int i = deque.peek();//System.out.println(i);while(!deque.isEmpty() && temperatures[i] < temperatures[j]){deque.pop();result[i] = j-i;if(!deque.isEmpty()){i = deque.peek();}else{deque.push(j);break;}}if(temperatures[i] >= temperatures[j]){deque.push(j);              }}return result;}
}

2.496. 下一个更大元素 I

题目链接:496. 下一个更大元素 I

思路

数组内无重复→哈西搜索勉强实现

相等于从739. 每日温度单个数组比较变成两个数组,但本质相同,直接遍历比较父集

出现更大的值时,则通过哈希搜索子集对应的数组位置,将该更大值赋值给子集对应的数组位置。

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {//找到nums2与nums1匹配的元素,其次计算在nums2右边比它大的值,并且nums1是nums2的子集。Map<Integer,Integer> map = new HashMap<>();int len1 = nums1.length;int len2 = nums2.length;for(int i = 0;i < len1;i++){map.put(nums1[i],i);}int[] result = new int[len1];Arrays.fill(result,-1);Deque<Integer> deque = new LinkedList();deque.push(nums2[0]);for(int i = 1;i < len2;i++){int value = deque.peek();while(!deque.isEmpty() && value < nums2[i]){if(map.containsKey(value)){result[map.get(value)] = nums2[i];}deque.pop();if(!deque.isEmpty()){value = deque.peek();}}deque.push(nums2[i]);}return result;}
}

3.503. 下一个更大元素 II

题目链接:503. 下一个更大元素 II

4. 42. 接雨水

题目链接:42. 接雨水

5.84. 柱状图中最大的矩形

题目链接:84. 柱状图中最大的矩形

总结

http://www.lryc.cn/news/5245.html

相关文章:

  • C++之可调用对象、bind绑定器和function包装器
  • MongoDB--》文档查询的详细具体操作
  • 网络协议(六):网络层
  • 热启动预示生态起航的Smart Finance,与深度赋能的SMART通证
  • 提分必练,中创教育PMP全真模拟题分享
  • PID控制算法基础介绍
  • Ajax 学习笔记
  • ​力扣解法汇总1234. 替换子串得到平衡字符串​
  • C++关键字之const、inline、static
  • 【成为架构师课程系列】怎样进行概念架构(Conceptual Architecture)?
  • PostgreSQL的下载安装教程(macOS、Windows)
  • 98年的确实卷,公司新来的卷王,我们这帮老油条真干不过.....
  • 软件架构知识2-系统复杂度
  • JavaSE学习day4_02 数组(超级重点)
  • Theano教程:Python的内存管理
  • Linux | Liunx安装Tomcat(Ubuntu版)
  • 缓冲区浅析
  • Day888.MySQL是怎么保证主备一致的 -MySQL实战
  • 互联网舆情监测系统的发展阶段,TOOM互联网舆情监测系统有哪些?
  • GIT命令操作大全
  • 突破传统开发模式,亚马逊云科技助力中科院加速推动合成生物学
  • 分享开放通达信l2接口的过程,开发之后怎么使用?
  • 33、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测
  • 【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统
  • 手写识别字体的步骤是什么?怎么识别图片中的文字?
  • Mysql 存储过程
  • 【LeetCode】每日一题(3)
  • websocket学习
  • Java面试题及答案整理汇总(2023最新版)
  • 公司来了个卷王,我愿称之为王中王,让人崩溃