Leetcode 84

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。

输入: [2,1,5,6,2,3]
输出: 10
image.png
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()]) {
     //由于是单调栈,栈中元素都小于等于栈顶,所以可以以栈里当前元素的下标和i的差值作为矩形的宽
      //因为i实际就是原来栈顶的下标加一
      max = Math.max(max, h[s.pop()] * (i - (s.isEmpty() ? 0 : s.peek() + 1)));
    }
    // put current bar's index to the stack
    s.push(i++);
  }
    
 
  while (!s.isEmpty()) {
    max = Math.max(max, h[s.pop()] * (n - (s.isEmpty() ? 0 : s.peek() + 1)));
  }
    
  return max;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容