博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 84. Largest Rectangle in Histogram
阅读量:5111 次
发布时间:2019-06-13

本文共 2497 字,大约阅读时间需要 8 分钟。

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.

1

Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

2

The largest rectangle is shown in the shaded area, which has area = 10 unit.

For example,

Given heights = [2,1,5,6,2,3],
return 10.

思路,单调栈,维护一个递增的栈。 时间复杂度O(n)

class Solution {    public:    struct node {        int x;        int left;        int right;    };    int largestRectangleArea(vector
& heights) { vector
st; int n = heights.size(); if (n == 0) return 0; if (n == 1) return heights[0]; vector
sum(n); for (int i = 0; i < n; ++i) { if (i > 0) sum[i] = sum[i-1] + 1; else sum[i] = 1; } int ans = 0; for (int i = 0; i < n; ++i) { if (st.empty() || st.back().x < heights[i]) { st.push_back({heights[i],i,i}); } else { int ileft = 0, iright = 0; while (!st.empty()) { node v = st.back(); if (v.x >= heights[i]) { st.pop_back(); ileft = v.left; if (st.size()) st.back().right = v.right; int tmp = (sum[v.right]-sum[v.left-1])*v.x; if (tmp > ans) ans = tmp; } else break; } st.push_back({heights[i],ileft,i}); } } while (!st.empty()) { node v = st.back(); st.pop_back(); if (st.size()) st.back().right = v.right; int tmp = (sum[v.right]-sum[v.left-1])*v.x; if (tmp > ans) ans = tmp; } return ans; }};
class Solution {public:        int largestRectangleArea(vector
& heights) { heights.push_back(0); int n = heights.size(); stack
st; int ans = 0; for (int i = 0; i < n; ++i) { while (!st.empty() && heights[i] <= heights[st.top()]) { int top = st.top(); st.pop(); int l; if (st.empty()) l = - 1; else l = st.top(); ans = max(ans, (i - l - 1) * heights[top]); } st.push(i); } return ans; }};

转载于:https://www.cnblogs.com/pk28/p/8563341.html

你可能感兴趣的文章
分布式锁的思路以及实现分析
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
安装 Express
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
个人对vue生命周期的理解
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>