java刷题--84柱状图中最大的矩形
Posted Anrys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java刷题--84柱状图中最大的矩形相关的知识,希望对你有一定的参考价值。
题目
代码
class Solution {
public int largestRectangleArea(int[] heights) {
int maxarea = 0;
int len = heights.length;
for (int i=0;i<len;i++){
if (heights[i]*len<=maxarea) continue;// 如果当前元素的值×长度都小于当前maxarea则没有继续查找的必要
int left = i,right = i;
while (left>0 && heights[left-1]>=heights[i]) left--;
while (right<len-1 && heights[right+1]>=heights[i]) right++;
int area = (right-left+1)*heights[i];
if (area>maxarea) maxarea = area;
} return maxarea;
}
}
单调栈
class Solution {
public int largestRectangleArea(int[] h) {
int n = h.length, i = 0, max = 0;
Stack<Integer> s = new Stack<>();
while (i < n) {
while (!s.isEmpty() && h[i] < h[s.peek()]) {
int high = h[s.pop()];
int width = i - (s.isEmpty() ? 0 : s.peek() + 1);
max = Math.max(max, high * width);
}
s.push(i); //自增最后操作
i++;
}
while (!s.isEmpty()){
//留到最后是最小的 宽度由n来减
max = Math.max(max, h[s.pop()] * (n - (s.isEmpty() ? 0 : s.peek() + 1)));
}
return max;
}
}
结果
以上是关于java刷题--84柱状图中最大的矩形的主要内容,如果未能解决你的问题,请参考以下文章