LeetCode-[单调栈]Largest Rectangle in Histogram
来源:互联网 发布:diy头像制作软件 编辑:程序博客网 时间:2024/06/01 15:33
Link
Link
单调栈使用最经典题目。
求最大矩形面积。
N2方法是枚举起点,然后不断枚举终点,在起点固定终点右移过程中记录最短距离即可。
N1方法是使用单调栈,基于的观察是对于一个连续上升的矩形来说,若当前矩形比前一个不小于就放入队列。
因为此时最优解的终点必然可以延展到当前矩形。若当前矩形小于前一个,那前一个有可能是最优解的终点。
现在问题是,如何找到最优解的起点。
此时以 前一个矩形为终点,弹栈时,枚举栈中小于当前的矩形当作高度和起点来计算,大于的都弹栈。
栈中的数据意思是,从栈中比我小的位置开始起始到当前的最小值就是我(若栈为空,则从数组其实到当前)
这些结束后,再对栈中的数据遍历计算一遍即可。
class Solution(object): def largestRectangleArea(self, heights): """ :type heights: List[int] :rtype: int """ stack=[] ans=0 hLen=len(heights) idx=0 while idx<hLen: if len(stack)==0 or heights[idx]>=heights[stack[-1]]: stack.append(idx) idx+=1 else: # 枚举起点和高度,结束点已经定了是idx-1的位置 # 对于当前的数据,存在栈中的位置之前的数据肯定都是满足大于等于当前数据 t=stack.pop() if not len(stack): ans=max(ans,heights[t]*idx) else: ans=max(ans,heights[t]*(idx-1-stack[-1])) if len(stack): tt=stack[-1] while len(stack): t=stack.pop() if not len(stack): ans=max(ans,heights[t]*(tt+1)) else: ans=max(ans,heights[t]*(tt-stack[-1])) return ans
阅读全文
0 0
- LeetCode-[单调栈]Largest Rectangle in Histogram
- LeetCode Largest Rectangle in Histogram (单调栈)
- LeetCode 84 Largest Rectangle in Histogram (单调栈)
- LeetCode 84. Largest Rectangle in Histogram 单调栈应用
- LeetCode-84-Largest Rectangle in Histogram 经典题目,单调栈
- [leetcode] 【栈】 84. Largest Rectangle in Histogram
- LeetCode: Largest Rectangle in Histogram
- LeetCode Largest Rectangle in Histogram
- LeetCode: Largest Rectangle in Histogram
- [Leetcode] Largest Rectangle in Histogram
- [LeetCode] Largest Rectangle in Histogram
- [Leetcode] Largest Rectangle in Histogram
- [leetcode] Largest Rectangle in Histogram
- [LeetCode]Largest Rectangle in Histogram
- Leetcode: Largest Rectangle in Histogram
- [leetcode]Largest Rectangle in Histogram
- Leetcode:Largest Rectangle in Histogram
- LeetCode-Largest Rectangle in Histogram
- 利用eclipse + qemu| Vmware + gdb 调试linux内核
- 《Java源码分析》:HashMap
- 对于centos7网卡不见的问题
- CentOS7(Job for network.service failed) Network Service开机无法启动的解决方法
- 第四期苏州智能制造共享公开课圆满落幕
- LeetCode-[单调栈]Largest Rectangle in Histogram
- tensorflow将训练好的模型
- LINUX下设置和查看网关的命令
- qt遇到的第二坑-qmake
- 无需手机日历借助Excel轻松推算N个月或年之后的日期
- 运算 优先级
- springMvc 上传实例
- 构建Spring Restful API请求参数解析
- 图像的镜像cvFlip