写点什么

代码随想录 Day60 - 单调栈(三)

作者:jjn0703
  • 2023-08-27
    江苏
  • 本文字数:832 字

    阅读完需:约 3 分钟

作业题

84.柱状图中最大的矩形

链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/description/

单调栈的应用,主要按三种情况讨论:

情况一:当前遍历的元素 heights[i]大于栈顶元素 heights[stack.peek()]的情况

情况二:当前遍历的元素 heights[i]等于栈顶元素 heights[stack.peek()]的情况

情况三:当前遍历的元素 heights[i]小于栈顶元素 heights[stack.peek()]的情况

package jjn.carl.monotonic_stack;
import java.util.Scanner;import java.util.Stack;
/** * @author Jiang Jining * @since 2023-08-27 10:25 */public class LeetCode84 { public int largestRectangleArea(int[] heights) { int[] newHeight = new int[heights.length + 2]; System.arraycopy(heights, 0, newHeight, 1, heights.length); newHeight[heights.length+1] = 0; newHeight[0] = 0; Stack<Integer> stack = new Stack<>(); stack.push(0); int res = 0; for (int i = 1; i < newHeight.length; i++) { while (newHeight[i] < newHeight[stack.peek()]) { int mid = stack.pop(); int w = i - stack.peek() - 1; int h = newHeight[mid]; res = Math.max(res, w * h); } stack.push(i); } return res; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int total = scanner.nextInt(); int[] heights = new int[total]; for (int i = 0; i < total; i++) { heights[i] = scanner.nextInt(); } int largestRectangleArea = new LeetCode84().largestRectangleArea(heights); System.out.println(largestRectangleArea); }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

jjn0703

关注

Java工程师/终身学习者 2018-03-26 加入

USTC硕士/健身健美爱好者/Java工程师.

评论

发布
暂无评论
代码随想录Day60 - 单调栈(三)_jjn0703_InfoQ写作社区