leetcode84题java解法

package jyy.leetcode.com;

import java.util.Stack;

public class EightyFour {
public static int largestRectangleArea(int[] heights) {
int maxArea = 0;
Stack stack = new Stack();
int minHeight=0;
stack.push(-1);
// 最左边界
for (int i = 0; i < heights.length; i++) {
while(stack.peek()!=-1&&heights[stack.peek()]>=heights[i])
maxArea=Math.max(maxArea, heights[stack.pop()]*(i-stack.peek()-1));
stack.push(i);
}
//比较剩下stack栈中,包含栈中下标柱状图中最大的矩形面积;
while(stack.peek()!=-1) {
maxArea=Math.max(maxArea, heights[stack.pop()] * (heights.length - stack.peek() -1));
}
return maxArea;
}
public static void main(String[] args) {
int[] heights= {6,7,5,2,4,5,9,3};
int results=largestRectangleArea(heights);
System.out.println(results);
}
}
leetcode第84题:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
1.两个柱子中最大的矩形取决于它们中间最低的柱子的高度, 矩形的宽度=右边界坐标-左边界坐标, 右边边界就是heights[i]中的坐标i,i=0时,左坐标就是-1,为什么stack要首先push-1;
2.进栈柱状图的高度是依次递增的,所以进栈。当柱状图的高度下降时就开始出栈
3.stack中剩余柱状图中的坐标,就开始遍历比较
4.为什么求宽度-1,是当前柱状图右边界

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值