leetcode:求直方圖構成的矩形最大面積
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 haa area=10 unit.
Example 1:
Input:[2,1,5,6,2,3]
Output:10
解題思路:
方法1:
暴力以height為標準進行列舉,時間超時.
方法2:
利用單調遞增棧的思想.
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
class Solution{
public:
#if 0
int largestRectangleArea(vector<int>& heights){
if(heights.empty())
return 0;
int area=0,h=0,left,right;
for(auto i=0;i<heights.size();i++){
left=i,right=i,h=heights[i];
while(left>0&&heights[i]<=heights[left-1]){left--;};
while(right<heights.size()-1&&heights[i]<=heights[right+1]){right++;};
area=max(area,(right-left+1)*h);
}
return area;
}
#endif
int largestRectangleArea(vector<int>& heights){
if(heights.empty())
return 0;
heights.push_back(-1);/*這樣可以計算heights陣列所有的元素*/
stack<int> des;
int area=0,left;
for(auto i=0;i<heights.size();i++){
if(des.empty()||heights[des.top()]<=heights[i]){
des.push(i);
}else{
while(!des.empty()&&heights[des.top()]>heights[i]){
left=des.top();
des.pop();
area=max(area,(i-left)*heights[left]);
}
des.push(left);/*入棧*/
heights[left]=heights[i];/*記憶元素*/
}
}
return area;
}
};
int main(int argc,char* argv[]){
vector<int> heights={6,7,5,2,4,5,9,3};/*0、1、2、3、4、5、6、7*/
cout<<Solution().largestRectangleArea(heights)<<endl;
return 0;
}
相關文章
- 直方圖中最大矩形直方圖
- OpenCV成長之路(4):影象直方圖OpenCV直方圖
- 直方圖直方圖
- 收集直方圖及檢視直方圖資訊直方圖
- OpenCV成長之路(5):影象直方圖的應用OpenCV直方圖
- 通過結構計算矩形的面積
- dba_histograms等高直方圖和等頻直方圖的理解Histogram直方圖
- 直方圖(histograms)直方圖Histogram
- 7.3 直方圖直方圖
- oracle 直方圖Oracle直方圖
- 直方圖均衡化直方圖
- 04:垂直直方圖直方圖
- oracle直方圖使用Oracle直方圖
- 直方圖學習直方圖
- Oracle直方圖解析Oracle直方圖圖解
- [zt] Histograms - 直方圖Histogram直方圖
- [20170615]直方圖-高度直方圖(11g).txt直方圖
- Oracle直方圖詳解Oracle直方圖
- 【效能優化】直方圖優化直方圖
- 聊一聊MySQL的直方圖MySql直方圖
- LeetCode_84.柱狀圖中最大的矩形LeetCode
- 銀彈谷:IT層大面積應用成低程式碼平臺落地的主要特徵特徵
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- 一文搞懂 Prometheus 的直方圖Prometheus直方圖
- oracle統計資訊--直方圖的收集:Oracle直方圖
- col_usage$與直方圖的收集直方圖
- halcon-直方圖均衡直方圖
- python如何畫直方圖Python直方圖
- elasticsearch 之 histogram 直方圖聚合ElasticsearchHistogram直方圖
- oracle直方圖筆記-轉Oracle直方圖筆記
- 使用直方圖注意事項直方圖
- (轉)Oracle直方圖詳解Oracle直方圖
- Oracle直方圖詳解(ZT)Oracle直方圖
- 【leetcode】劍指 Offer II 105. 島嶼的最大面積-【深度優先DFS】LeetCode
- matplotlib的直方圖繪製(筆記)直方圖筆記
- Oracle直方圖統計資訊的應用Oracle直方圖
- 關於列的直方圖統計資訊直方圖