84. Largest Rectangle in Histogram

https://www.cnblogs.com/grandyang/p/4322653.html

整体思路是递增不处理,当遇到减少时,计算之前所有大于当前高度的最优解。因为实际上只要遇到比你小的,就不可能以你为高度了。索引之间的差刚好能反应当前栈中高度所覆盖的区域,即宽度。

维护一个递增的栈,每次只用以当前栈的index的相对高 * 宽度,宽度就是以当前栈的index的右侧。每次计算的是一个局部最优解。

i--的目的是让比较对象一直停留在这个位置;

push 0的目的是计算所有的栈中剩下的大小;

当前比较的i,实际上只计算i左侧的最优解,所以是i - con.top() - 1,并且con.top()是递增的下一个index。

1.存储一个单调递增的栈

2.如果你不加一个0进去,[1]这种情况就会输出结果0,而不是1

3.单调递增的栈,如果遇到比栈的top小的,就要计算一次。其实可以看到,这个top,从左向top是最大的,top向右也是最大的,所以只能乘以他自己。

注意:这个地方con必须pop(),这样才能找到当前top所属于的高度所覆盖的宽度,比如当前top的值是7,pop出来后stack的top的值可能变成3,覆盖的区域是4,因为stack里面不是3、4、5这样连续的,大概率是一些间隔的。这也就是为什么后面使用i - con.top() - 1 ,而不使用i - index。

每次当前位置的height比stack的top小的,就需要计算以stack顶部的height为高度的局部最优解。

算覆盖区域的时候,必是i - con.top(),这个时候你就应该考虑是否-1。

class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int> con;
int area = ;
heights.push_back();
for(int i = ;i < heights.size();i++){
if(con.empty() || heights[con.top()] < heights[i])
con.push(i);
else{
int index = con.top();
con.pop();
area = max(area,heights[index] * (con.empty() ? i : (i - con.top() - )));
i--;
}
}
return area;
}
};

85. Maximal Rectangle

http://www.cnblogs.com/grandyang/p/4322667.html

把矩形分成一行一行送入子函数获得每行的最大值,然后再比较各行的最大值获得总的最大值。每行的计算和largest rectangle in histogram是一样的。

送入的每行不是0、1组成,而是每行的高度,这样就转换成了largest rectangle in histogram的问题

class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int m = matrix.size();
if(m <= )
return ;
int n = matrix[].size();
if(n <= )
return ;
int res = ;
vector<int> input(n);
for(int i = ;i < m;i++){
for(int j = ;j < n;j++)
input[j] = (matrix[i][j] == '' ? : + input[j]);
res = max(res,maximal(input));
}
return res;
}
int maximal(vector<int> matrix){
stack<int> s;
int res = ;
matrix.push_back();
for(int i = ;i < matrix.size();i++){
if(s.empty() || matrix[s.top()] < matrix[i])
s.push(i);
else{
int num = s.top();
s.pop();
res = max(res,matrix[num] * (s.empty() ? i : (i - s.top() - )));
i--;
}
}
return res;
}
};

221. Maximal Square

https://www.cnblogs.com/grandyang/p/4550604.html 解法3

以正方形的右下角进行判断,只用判断左上角,左边和上边。

dp[i][j] 表示到达 (i, j) 位置所能组成的最大正方形的边长。

class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.empty())
return ;
if(matrix[].empty())
return ;
int res = ;
vector<vector<int> > area(matrix.size(),vector<int>(matrix[].size(),));
for(int i = ;i < matrix.size();i++){
for(int j = ;j < matrix[].size();j++){
if(i == || j == )
area[i][j] = matrix[i][j] - '';
else if(matrix[i][j] == '')
area[i][j] = min(area[i-][j-],min(area[i-][j],area[i][j-])) + ;
res = max(res,area[i][j]);
}
}
return res*res;
}
};

84. Largest Rectangle in Histogram的更多相关文章

  1. LeetCode 84. Largest Rectangle in Histogram 单调栈应用

    LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...

  2. 刷题84. Largest Rectangle in Histogram

    一.题目说明 题目84. Largest Rectangle in Histogram,给定n个非负整数(每个柱子宽度为1)形成柱状图,求该图的最大面积.题目难度是Hard! 二.我的解答 这是一个 ...

  3. 【LeetCode】84. Largest Rectangle in Histogram 柱状图中最大的矩形(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 单调栈 日期 题目地址: https://leetc ...

  4. 【LeetCode】84. Largest Rectangle in Histogram

    Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...

  5. 84. Largest Rectangle in Histogram *HARD* -- 柱状图求最大面积 85. Maximal Rectangle *HARD* -- 求01矩阵中的最大矩形

    1. Given n non-negative integers representing the histogram's bar height where the width of each bar ...

  6. 84. Largest Rectangle in Histogram *HARD* -- 求柱状图中的最大矩形面积

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  7. [LeetCode#84]Largest Rectangle in Histogram

    Problem: Given n non-negative integers representing the histogram's bar height where the width of ea ...

  8. LeetCode OJ 84. Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  9. LeetCode 84. Largest Rectangle in Histogram 直方图里的最大长方形

    原题 Given n non-negative integers representing the histogram's bar height where the width of each bar ...

随机推荐

  1. Docker 安装MySQL5.7(三)

    Docker 安装MySQL5.7 1.搜索docker镜像(可以看到搜索的结果,这个结果是按照一定的星级评价规则排序的) docker search mysql 2.拉取docker的mysql镜像 ...

  2. Linux常用基本命令:三剑客命令之-awk动作用法(1)

    1,多个动作,怎么写? ghostwu@dev:~/linux/awk$ cat host.txt name ip地址 host1 192.168.1.1 host2 192.177.81.1 hos ...

  3. 【工具相关】Web-将网站放在XAMPP上面

    一,将XAMPP服务器打开--->Welcome--->Open Application Folder. 二,会出现如下所示界面.找到htdocs. 三,打开htdocs.如下图所示. 四 ...

  4. 【工具相关】web-HTML/CSS/JS Prettify的使用

    一,打开Sublime Text,代码如下面所示. 二,鼠标右键--->HTML/CSS/JS Prettify--->Prettify Code.代码如图所示,明显的代码变得整齐了.

  5. 【读书笔记】iOS-OCUnit-单元测试

    一,新建立一个hello工程--->在左侧会看到helloTests---->helloTests.m.如下图所示. 二,打开查看会看到如下代码. #import <UIKit/UI ...

  6. IE9获取file控件的本地文件路径

    最近发现,在IE9下,公司网站的本地图片预览都无法正常显示,经过测试发现,原因在于IE9下无法获取file控件的文件路径. 以前的代码如下: var strPic = fileImg.value; i ...

  7. MySQL 性能优化--优化数据库结构之优化数据类型

    MySQL性能优化--优化数据库结构之优化数据类型   By:授客  QQ:1033553122   优化数字数据(Numeric Data) l   对于唯一ID或其它可用字符串或数字表示的值,选择 ...

  8. multipart/form-data文件上传

    form表单的enctype属性:规定了form表单数据在发送到服务器时候的编码方式 application/x-www-form-urlencoded:默认编码方式 multipart/form-d ...

  9. [201804012]关于hugepages 3.txt

    [201804012]关于hugepages 3.txt --//有一段时间我一直强调安装oracle一定要配置hugepage,因为现在的服务器内存越来越大,如果还使用4K的页面表,如果内存表占用内 ...

  10. Kubernetes的搭建与配置(一):集群环境搭建

    1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [root@localhost ~]# uname -a Linux localhost.loc ...