标签:csp efi col tar 地址 height 原创 网站 stack
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址
这里一道很经典的题目,许多网站上都有这道题目。题目很容易找到一个O(N2)的解,但是还存在一个更优的O(N)的解。
首先明确几个事实:最大矩形一定以N个矩阵之中的一个为高度。
因此问题可转换成以第i个矩阵为高度的最大面积。
C++
#include "iostream" #include "stack" #include "vector" #include "algorithm" using namespace std; int getMaxArea(vector<int> &hist) { stack<int> s; int max_area = 0; int i = 0; int tp, area_with_top; while(i < hist.size()) { if(s.empty() || hist[s.top()] <= hist[i]) s.push(i++); else { tp = s.top(); s.pop(); area_with_top = hist[tp] * (s.empty() ? i : i-s.top()-1); max_area = max(max_area, area_with_top); } } while(!s.empty()) { tp = s.top(); s.pop(); area_with_top = hist[tp] * (s.empty() ? i : i-s.top()-1); max_area = max(max_area, area_with_top); } return max_area; } int main() { int N; vector<int> vec; cin >> N; for(int i=0; i<N; i++) { int val; cin >> val; vec.push_back(val); } cout << getMaxArea(vec); }
标签:csp efi col tar 地址 height 原创 网站 stack
原文地址:http://www.cnblogs.com/meelo/p/7707180.html