博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求解最大矩形面积 — leetcode 85. Maximal Rectangle
阅读量:6420 次
发布时间:2019-06-23

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

之前切了道求解最大正方形的题,题解猛戳 。这道题 题意与之类似,但是解法完全不一样。

先来看这道题 ,如果暴力求解,可以枚举每个点为最小值,向两边扩展,复杂度 O(n^2)。我们可以维护一个栈,从而将复杂度降低到 O(n),这个栈的思维非常巧妙,参考了 ,我是完全想不出来(或者说忘记了)。具体代码可以猛戳 。

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 放一放吧。

睡觉,身累心累啊。

转载地址:http://mdlra.baihongyu.com/

你可能感兴趣的文章
armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】
查看>>
房地产英语 Real estate词汇
查看>>
stack overflow--技术问答网站
查看>>
python接口自动化测试(八)-unittest-生成测试报告
查看>>
hdu1052 Tian Ji -- The Horse Racing 馋
查看>>
linux环境内存分配原理 mallocinfo【转】
查看>>
SharePoint 2013 开发——发布SharePoint应用程序
查看>>
[LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
查看>>
Spring 3.2.0 版本的一个 ClassMetadataReadingVisitor 错误
查看>>
【最新】2015年7月之15个最新jQuery插件
查看>>
真正的上锁前,为何要调用preempt_disable()来关闭抢占的case【转】
查看>>
ASP.NET程序开发范例宝典
查看>>
Windows 8 C#调用C++编写的Windows运行时组件
查看>>
ip的划分,超详细
查看>>
Ubuntu 14.04安装LAMP(Linux,Apache,MySQL,PHP)
查看>>
云计算成朝阳产业,未来发展已成趋势
查看>>
一个帖子掌握android所有控件、ProgressBar 、Android 动画效果、SQLite、四大组件、Android多媒体(转...
查看>>
项目开发容易出错情况统计
查看>>
Foundations of Python Network Programming - 读书笔记系列(2) - Web Services
查看>>
thinkphp中配置信息的二维数组设置与使用
查看>>