博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 84. Largest Rectangle in Histogram
阅读量:5332 次
发布时间:2019-06-15

本文共 1439 字,大约阅读时间需要 4 分钟。

原题链接在这里:

题目:

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

The largest rectangle is shown in the shaded area, which has area = 10 unit.

For example,

Given heights = [2,1,5,6,2,3],
return 10.

题解: 

用stack保存数组的index, 确保stack中index对应的高度是递增的.

当出现较小高度时需要不停的pop出比它大的index, 更新最大面积. 

如何更新呢. 高度是heights[stk.pop()], 宽度是stk pop后的顶部index, stk.peek()到i之间的距离-1.

最后在从后到前更新次最大面积.

Time Complexity: O(n). n = heights.length. 

Space: O(n).

AC Java:

1 class Solution { 2     public int largestRectangleArea(int[] heights) { 3         if(heights == null || heights.length == 0){ 4             return 0; 5         } 6          7         int res = 0; 8         Stack
stk = new Stack
(); 9 stk.push(-1);10 11 for(int i = 0; i
=heights[i]){13 int h = heights[stk.pop()];14 res = Math.max(res, h*(i-stk.peek()-1)); 15 }16 17 stk.push(i);18 }19 20 while(stk.peek()!=-1){21 res = Math.max(res, heights[stk.pop()]*(heights.length-stk.peek()-1));22 }23 24 return res; 25 }26 }

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4824943.html

你可能感兴趣的文章
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
单例模式的几种实现方式及对比
查看>>
邓白氏编码 申请
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>