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

代码随想录day42:单调栈part2

42. 接雨水

class Solution {public int trap(int[] height) {int ans = 0;Deque<Integer> st = new ArrayDeque<>();for(int i = 0; i < height.length; i++){while(!st.isEmpty() && height[i] >= height[st.peek()]){int mid = height[st.pop()];if(st.isEmpty()) break;int left = height[st.peek()];int right = height[i];int h = Math.min(right,left) - mid;ans += h * (i - st.peek() - 1);}st.push(i);}return ans;}
}

84. 柱状图中最大的矩形

class Solution {public int largestRectangleArea(int[] heights) {Deque<Integer> st = new ArrayDeque<Integer>();// 数组扩容,在头和尾各加入一个元素int [] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int index = 0; index < heights.length; index++){newHeights[index + 1] = heights[index];}heights = newHeights;// st.push(0);int result = 0;// 第一个元素已经入栈,从下标1开始for (int i = 0; i < heights.length; i++) {while (!st.isEmpty() && heights[i] <= heights[st.peek()]) { // 注意是whileint mid = st.peek();st.pop();if(!st.isEmpty()){int left = st.peek();int right = i;int w = right - left - 1;int h = heights[mid];result = Math.max(result, w * h);   }}st.push(i);// }}return result;}
}

这两个题一个代码格式,接雨水是找遍历位置两边比他大的,最大面积是找两边比他小的


http://www.mrgr.cn/news/53523.html

相关文章:

  • 华为HCIP-openEuler认证详解
  • 【Python】为什么不能直接比较数字 if student_id == 667788
  • 如何将两个同样大小的List组装成一个Map?
  • windows C++-有效使用PPL(四)
  • Golang | Leetcode Golang题解之第492题构造矩形
  • 华为OD机试2024年真题( 最远足迹)
  • Python库matplotlib之十一
  • manimgl 安装win7
  • Vue脚手架学习 vue脚手架配置代理、插槽、Vuex使用、路由、ElementUi插件库的使用
  • 判断推理学习
  • snmpbulkwalk使用说明
  • CVTE Android面试题及参考答案
  • 查缺补漏----三次握手与四次挥手
  • 用友 NCC SPR 日志工具的使用
  • git区分大小写吗?如果不区分,那要如何设置?
  • SQLI LABS | Less-1 GET - Error based - Single Quotes - String
  • HCIA复习实验
  • 查缺补漏----Cache命中率与缺失率的辨析
  • Guava防击穿回源
  • 蚂蚁华东师范大学:从零开始学习定义和解决一般优化问题LLMOPT