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

代码随想录day45:单调栈篇

文章目录

    • day45:单调栈篇
      • 739.每日温度
      • 496.下一个更大元素 I
      • 503.下一个更大元素 II
      • 42.接雨水
      • 84.柱状图中最大的矩形

day45:单调栈篇

739.每日温度

class Solution {public int[] dailyTemperatures(int[] temperatures) {int n = temperatures.length;int[] ans = new int[n];Stack<Integer> stack = new Stack<>();stack.push(0);for (int i = 1; i < n; i++) {if (temperatures[i] <= temperatures[stack.peek()])stack.push(i);else {while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {ans[stack.peek()] = i - stack.pop();}stack.push(i);}}return ans;}
}

496.下一个更大元素 I

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> stack = new Stack<>();int[] ans = new int[nums1.length];Arrays.fill(ans, -1);Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++)map.put(nums1[i], i);stack.push(0);for (int i = 1; i < nums2.length; i++) {if (nums2[i] <= nums2[stack.peek()])stack.push(i);else {while (!stack.isEmpty() && nums2[i] > nums2[stack.peek()]) {if (map.containsKey(nums2[stack.peek()])) {ans[map.get(nums2[stack.peek()])] = nums2[i];}stack.pop();}stack.push(i);}}return ans;}
}

503.下一个更大元素 II

class Solution {public int[] nextGreaterElements(int[] nums) {int n = nums.length;int[] ans = new int[n];Arrays.fill(ans, -1);Stack<Integer> stack = new Stack<>();for (int i = 0; i < 2 * n; i++) {while (!stack.isEmpty() && nums[i % n] > nums[stack.peek()]) {ans[stack.pop()] = nums[i % n];}stack.push(i % n);}return ans;}
}

42.接雨水

class Solution {public int trap(int[] height) {Stack<Integer> stack = new Stack<>();int sum = 0;for (int i = 0; i < height.length; i++) {while (!stack.isEmpty() && height[i] > height[stack.peek()]) {int h_pop = height[stack.pop()];if (stack.isEmpty()) break;int h = Math.min(height[stack.peek()], height[i]) - h_pop;int w = i - stack.peek() - 1;sum += h * w;}stack.push(i);}return sum;}
}

84.柱状图中最大的矩形

class Solution {public int largestRectangleArea(int[] heights) {Stack<Integer> stack = new Stack<>();int[] newHeights = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for (int i = 0; i < heights.length; i++)newHeights[i + 1] = heights[i];heights = newHeights;int ans = 0;stack.push(0);for (int i = 1; i < heights.length; i++) {while (heights[i] < heights[stack.peek()]) {int mid = stack.pop();int left = stack.peek();int w = i - left - 1;int h = heights[mid];ans = Math.max(ans, h * w);}stack.push(i);}return ans;}
}

相关文章:

  • docker:can’t create unix socket /var/run/docker.sock: is a directory
  • 一个执照可以注册几个微信视频号,几个抖音视频号!
  • 【送书福利第六期】:《AI绘画教程:Midjourney使用方法与技巧从入门到精通》
  • 大话设计模式之工厂模式
  • ubuntu常用记录
  • 第10讲:操作符详解
  • 2024年大广赛联通沃派命题解析:赛题内容一览
  • Webpack生成企业站静态页面 - 项目搭建
  • 代码学习记录31---动态规划开始
  • 基于RIP的MGRE综合实验
  • 启信宝商业大数据助力全国经济普查
  • MySQL用户操作
  • Mysql or与in的区别
  • ORACLE 存中文
  • 顺序表专题
  • classpath对获取配置文件的影响
  • es6
  • iOS | NSProxy
  • JS基础之数据类型、对象、原型、原型链、继承
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • nginx 配置多 域名 + 多 https
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue 动态创建 component
  • Vue2.0 实现互斥
  • 大数据与云计算学习:数据分析(二)
  • 第2章 网络文档
  • 什么软件可以剪辑音乐?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 我与Jetbrains的这些年
  • 详解移动APP与web APP的区别
  • 小试R空间处理新库sf
  • 智能合约Solidity教程-事件和日志(一)
  • 中文输入法与React文本输入框的问题与解决方案
  • ​2021半年盘点,不想你错过的重磅新书
  • (1) caustics\
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(六)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (十) 初识 Docker file
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • **CI中自动类加载的用法总结
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 回调、接口回调、 委托
  • .NET文档生成工具ADB使用图文教程
  • .sdf和.msp文件读取
  • [51nod1610]路径计数
  • [C#]winform部署yolov9的onnx模型
  • [CakePHP] 在Controller中使用Helper
  • [iOS]-UIKit