【leetCode】Largest Rectangle in Histogram&Maximal Rectangle
来源:互联网 发布:mac卸载win10 编辑:程序博客网 时间:2024/06/05 07:17
因为leetCode 的85题是84题的变种,所以合成一个博客写。
84题的题意:一个直方图中,每个矩阵都是宽为1,高度不同。求在这个直方图里能画出矩形的最大面积
思路:先从前到后,再从后到前,重复如下过程:
用一个栈,先入第一个元素,,如果后一个元素的高度比栈顶低,则加上该数对应的宽度并弹出该元素。一直重复完。
代码如下:
int largestRectangleArea(vector<int>& heights){ stack<int> r; int i,j=0,k,size=heights.size(),le=size,ans=0; if(size==0) return 0; vector<int> left(heights.size(),0),right(heights.size(),0); for(i=0; i<size; i++) { while(!r.empty()&&heights[i]<=heights[r.top()]) { left[i]+=1+left[r.top()]; r.pop(); } r.push(i); } while(!r.empty()) r.pop(); for(i=size-1; i>=0; i--) { while(!r.empty()&&heights[i]<=heights[r.top()]) { right[i]+=1+right[r.top()]; r.pop(); } r.push(i); } for(i=0; i<size; i++) ans=max(ans,(left[i]+right[i]+1)*heights[i]); return ans;}85题:有个m*n的矩阵,每个矩阵是0或1,求全1矩形面积的最大值。
很简单,每一行就是一个直方图的底,连续多少个1就是多少高度。与84题的代码一样,只不过重复。
代码如下:
int largestRectangleArea(vector<int>& heights){ stack<int> r; int i,j=0,k,size=heights.size(),le=size,ans=0; if(size==0) return 0; vector<int> left(heights.size(),0),right(heights.size(),0); for(i=0; i<size; i++) { while(!r.empty()&&heights[i]<=heights[r.top()]) { left[i]+=1+left[r.top()]; r.pop(); } r.push(i); } while(!r.empty()) r.pop(); for(i=size-1; i>=0; i--) { while(!r.empty()&&heights[i]<=heights[r.top()]) { right[i]+=1+right[r.top()]; r.pop(); } r.push(i); } for(i=0; i<size; i++) ans=max(ans,(left[i]+right[i]+1)*heights[i]); return ans;}int maximalRectangle(vector<vector<char>>& matrix) { int i,j,k,ans=0,m,n; m=matrix.size(); if(m==0) return 0; n=matrix[0].size(); vector<int> old(n,0); for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(matrix[i][j]=='1') old[j]++; else old[j]=0; } ans=max(ans,largestRectangleArea(old)); } return ans;}
0 0
- [LeetCode] Largest Rectangle in Histogram、Maximal Rectangle
- LeetCode Largest Rectangle in Histogram&&Maximal Rectangle
- 【leetCode】Largest Rectangle in Histogram&Maximal Rectangle
- Leetcode:Largest Rectangle in Histogram与Maximal Rectangle
- Leetcode 84. Largest Rectangle in Histogram & 85. Maximal Rectangle
- [LeetCode 84, 85]Largest Rectangle in Histogram / Maximal Rectangle
- leetcode 84.Largest Rectangle in Histogram, 85.Maximal Rectangle
- [LeetCode]84Largest Rectangle in Histogram && 85Maximal Rectangle
- leetcode 84|85. Largest Rectangle in Histogram | Maximal Rectangle
- Largest Rectangle in Histogram & Maximal Rectangle
- Largest Rectangle in Histogram&&Maximal Rectangle
- leetcode: Largest Rectangle in Histogram,Maximal Square,Maximal Square问题
- 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
- MySQL 加锁处理分析
- 2016ACM/ICPC亚洲区沈阳站1003题 Recursive sequence +构造矩阵+矩阵连乘
- VS2010非永久性配置和永久配置Opencv
- matlab与C/C++的混合编程
- CPU加电后第一条指令
- 【leetCode】Largest Rectangle in Histogram&Maximal Rectangle
- Android studio 如何导入并引用Library工程
- SPEC携手Cloud孕育性能新基准
- 396. Rotate Function (python)
- springMVC 静态资源引用
- 基于外键映射的 一对一关系
- linux函数调用中栈空间使用原则的验证
- 软件测试术语
- 深入理解java集合类及其运用总结及经验分享