求解最大矩形面积 — leetcode 85. Maximal Rectangle
之前切了道求解最大正方形的题,题解猛戳 这里。这道题 Maximal Rectangle 题意与之类似,但是解法完全不一样。
先来看这道题 Largest Rectangle in Histogram,如果暴力求解,可以枚举每个点为最小值,向两边扩展,复杂度 O(n^2)。我们可以维护一个栈,从而将复杂度降低到 O(n),这个栈的思维非常巧妙,参考了 discuss,我是完全想不出来(或者说忘记了)。具体代码可以猛戳 这里。
2016-08-07 补:stack 数组维护的是一个单调递增的数组,这貌似就是传说中的单调队列吧,后知后觉的我 ...
/**
* @param {number[]} heights
* @return {number}
*/
var largestRectangleArea = function(heights) {
heights.push(0);
var maxn = 0;
var stack = [];
for (var i = 0, len = heights.length; i < len; i++) {
while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {
var top = stack.pop();
var nextTop = stack.length === 0 ? -1 : stack[stack.length - 1];
maxn = Math.max((i - nextTop - 1) * heights[top], maxn);
}
stack.push(i);
}
return maxn;
};
有了这个作为基础,求解最大矩形也就不难了。可以一层层向下走,维护一个数组,每次去求解当时的最值即可。代码如下。
/**
* @param {number[]} heights
* @return {number}
*/
var largestRectangleArea = function(heights) {
heights.push(0);
var maxn = 0;
var stack = [];
for (var i = 0, len = heights.length; i < len; i++) {
while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {
var top = stack.pop();
var nextTop = stack.length === 0 ? -1 : stack[stack.length - 1];
maxn = Math.max((i - nextTop - 1) * heights[top], maxn);
}
stack.push(i);
}
return maxn;
};
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalRectangle = function(matrix) {
if (!matrix.length)
return 0;
var n = matrix.length
, m = matrix[0].length;
var heights = [];
for (var i = 0; i < m; i++)
heights[i] = 0;
var ans = 0;
for (var i = 0; i < n; i++) {
for (var j = 0; j < m; j++) {
if (matrix[i][j] === '1')
heights[j]++;
else
heights[j] = 0;
}
ans = Math.max(ans, largestRectangleArea(heights));
}
return ans;
};
说实话这道题的解法没有认真想(算是抄的吧,这完全不符合我的个性)。最近有点浮躁,也有点烦躁,相信一切都是瞬息,一切都将会过去。
暂时先把 leetcode 放一放吧。
睡觉,身累心累啊。
求解最大矩形面积 — leetcode 85. Maximal Rectangle的更多相关文章
- [LeetCode] 85. Maximal Rectangle 最大矩形
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and ...
- LeetCode (85): Maximal Rectangle [含84题分析]
链接: https://leetcode.com/problems/maximal-rectangle/ [描述] Given a 2D binary matrix filled with '0's ...
- leetCode 85.Maximal Rectangle (最大矩阵) 解题思路和方法
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...
- leetcode[85] Maximal Rectangle
给定一个只含0和1的数组,求含1的最大矩形面积. Given a 2D binary matrix filled with 0's and 1's, find the largest rectangl ...
- 求解最大正方形面积 — leetcode 221. Maximal Square
本来也想像园友一样,写一篇总结告别 2015,或者说告别即将过去的羊年,但是过去一年发生的事情,实在是出乎平常人的想象,也不具有代表性,于是计划在今年 6 月份写一篇 "半年总结" ...
- 【leetcode】Maximal Rectangle
Maximal Rectangle Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle conta ...
- 刷题85. Maximal Rectangle
一.题目说明 题目,85. Maximal Rectangle,计算只包含1的最大矩阵的面积.难度是Hard! 二.我的解答 看到这个题目,我首先想到的是dp,用dp[i][j]表示第i行第j列元素向 ...
- 85. Maximal Rectangle
85. Maximal Rectangle Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle c ...
- 【leetcode】85. Maximal Rectangle(单调栈)
Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...
随机推荐
- windows,linux,mac生成ssh public key 和 private key
https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair Creating the key How you create your SSH ...
- [整理]PHP/HTML混写的四种方式
PHP作为一款后端语言,为了输出给浏览器让浏览器呈现出来,无可避免的要输出HTML代码,下文介绍下我用过的三种PHP/HTML混编方法 1.单/双引号包围法 这是最初级的方法了,用法就像下面这样 &l ...
- 测试驱动开发(Test-Driven Development,简称TDD)--单元测试-->提高代码质量
!!! 1.估算和做项目计划时要算上单元测试时间 2.开发之前写单元测试代码 盖房子的时候,工人师傅砌墙,会先用桩子拉上线,以使砖能够垒的笔直,因为垒砖的时候都是以这根线为基准的.TDD就像这样,先写 ...
- JavaScript Patterns 6.5 Inheritance by Copying Properties
Shallow copy pattern function extend(parent, child) { var i; child = child || {}; for (i in parent) ...
- SQL Server(一)——数据库基础知识
SQL:Structured Quety Language SQL SERVER是一个以客户/服务器(c/s)模式访问.使用Transact-SQL语言的关系型数据库管理子系统(RDBMS) DBMS ...
- 一篇博客理解Recyclerview的使用
从Android 5.0开始,谷歌公司推出了RecylerView控件,当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问,recylerview是什么?为什么会有recyler ...
- ADO.NET知识汇总
这又是一篇记录平常工作笔记的博客,无论是在排版还是解说上都不会有太多要求.同时这也是一篇不上博客园首页的博客,Just记录一些工作笔记. vSelect返回单个值 string connSQL = @ ...
- SQL Serve里你总要去改变的3个配置选项
你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...
- LNMP+zabbix分布式监控搭建及版本升级
LNMP+zabbix分布式监控搭建需要组件:gcc gcc-c++ openssl* pcre pcre-devel gd gd-devel libjpeg-devel libpng-devel l ...
- Puppet3在CentOS6.5集群下的安装
环境:3台主机, IP分别为10.211.55.11.12.13 puppet master安装在10.211.55.11 puppet agent安装在10.211.55.11.12.13 1.安装 ...