这道题不好想,如果用动态规划复杂度高,所以采用栈的方法。参考如下:
https://blog.csdn.net/jingsuwen1/article/details/51577983
主要考虑具体的出入栈的问题。
long long max(long long a, long long b) { return a > b ? a : b; } int largestRectangleArea(const vector<int> &data) { stack<int> Stack; long long sMax = 0; int tmp = 0; for (int i = 0; i < data.size(); i++) { if (Stack.empty() || Stack.top() <= data[i]) Stack.push(data[i]); else { int count = 1; while (!Stack.empty() && Stack.top()>data[i]) { tmp = (count++) * Stack.top(); sMax = max(sMax, tmp); Stack.pop(); } while (count-->0) { Stack.push(data[i]); } } } //cout << "size : " << Stack.size() << endl; int count = 1; while (!Stack.empty()) { sMax = max(sMax, Stack.top()*count++); Stack.pop(); } return sMax; }