Q:给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积。

A:

这个题感觉蛮巧妙的。

如果这个点为‘1’,先计算当前行的最大宽度,这说明最大宽度左边的都是保证可以是矩形的。然后往上看,用最小的宽度和当前的高度计算最大的矩形。

看图:

代码:

public int maximalRectangle(char[][] matrix) {

if (matrix.length == 0)

return 0;

int maxArea = 0;

int[][] dp = new int[matrix.length][matrix[0].length];

for (int i = 0; i < matrix.length; i++) {

for (int j = 0; j < matrix[0].length; j++) {

if (matrix[i][j] == '1') {

//先计算最大宽度

if (j == 0) {

dp[i][j] = 1;

} else {

dp[i][j] = dp[i][j - 1] + 1;

}

int width = dp[i][j];

for (int k = i; k >= 0; k--) {

width = Math.min(width, dp[k][j]);

maxArea = Math.max(maxArea, width * (i - k + 1));

}

}

}

}

return maxArea;

}

同理,高度也可以这么做。

另一种就是参考计算直方图中最大矩形的面积

算法有了,就是求出每一层的 heights[] 然后传给上一题的函数就可以了。

代码:

public int maximalRectangle(char[][] matrix) {

if (matrix.length == 0) {

return 0;

}

int maxArea = 0;

int[] dp = new int[matrix[0].length];

for (int i = 0; i < matrix.length; i++) {

for (int j = 0; j < matrix[0].length; j++) {

if (matrix[i][j] == '1') {

dp[j] = dp[j] + 1;

} else {

dp[j] = 0;

}

}

int area = maxRec(dp);

maxArea = Math.max(maxArea, area);

}

return maxArea;

}

private int maxRec(int[] heights) {

Stack stack = new Stack < > ();

stack.push(-1);

int maxarea = 0;

for (int i = 0; i < heights.length; ++i) {

while (stack.peek() != -1 && heights[stack.peek()] >= heights[i])

maxarea = Math.max(maxarea, heights[stack.pop()] * (i - stack.peek() - 1));

stack.push(i);

}

while (stack.peek() != -1)

maxarea = Math.max(maxarea, heights[stack.pop()] * (heights.length - stack.peek() -1));

return maxarea;

}

leetcode最大矩形_LeetCode——最大矩形相关推荐

  1. leetcode最大矩形_LeetCode刷题笔记85:最大矩形(Python实现)

    题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0","1&qu ...

  2. c语言力扣l最大矩形,leetcode 84柱状图中最大的矩形,利用单调栈求解l

    利用单调了栈求解leetcode 84柱状图中最大的矩形 image image 利用单调递增栈的方式来实现,计算发生在每次弹出栈顶的操作过程中 单调递增栈的操作步骤 1.如果栈为空或者栈顶元素比入栈 ...

  3. LeetCode 84.柱状图中最大的矩形

    今天还是分享一道才刷过的题目, 柱状图中最大的矩形,这道题根上一篇我分享的接雨水类似,都是可以用双指针,动态规划(双指针加备忘录),单调栈来算 这道题的话三种方法都写了,双指针会超时,优化一下备忘录是 ...

  4. 编写矩形类 计算矩形面积

    编写矩形类 计算矩形面积 public class juxing {int a;int b; juxing(int a,int b){System.out.println("矩形面积s=&q ...

  5. windows 编程随笔——输出文本WM_PAINT消息|有效矩形和无效矩形

    在说文本输出前先说明下什么是: 1,WM_PAINT消息?什么情况触发此消息? 此消息通知窗口过程必须绘制客户区. 以下四种情况windows会通知窗口过程接收一个WM_PAINT消息: 用户移动或显 ...

  6. 【opencv】轮廓特征(质心,面积,周长,近似轮廓,凸包,凸度,边界矩形,直角矩形,旋转矩形,最小闭合圈,拟合椭圆、直线)

    4_9_2_轮廓特征 - OpenCV中文官方文档 找到轮廓的不同特征,例如面积,周长,质心,边界框等. 1. 特征矩 特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等.请查看特征矩上的维基 ...

  7. 定义—个类MyRectangle代表矩形,为矩形定义getLength方法(获得矩形的长度)、getWidth方法(获得矩形的宽度)、setLength方法(设置矩形的长度)....

    定义-个类MyRectangle代表矩形,为矩形定义getLength方法(获得矩形的长度).getWidth方法(获得矩形的宽度).setLength方法(设置矩形的长度).setWidth方法(设 ...

  8. 基于QGraphicsView、QGraphicsScene、自定义QGraphicsItem的小demo(正矩形、旋转矩形及圆形)

    网上有很多关于这三个的资料,这方面的功能不做过多的描述,仅仅将在做小Demo过程中遇到的问题做下记录,下面是Demo的界面图: Demo的初衷是不想每次使用QGraphicsView和QGraphic ...

  9. c语言菱形和矩形的意思,矩形和菱形有什么特征码?如何区别菱形和矩形?

    三角形.正方形.长方形和矩形是最早学习的几何图形,小学阶段已经将这几种基本图形全部学习过了.其中矩形和另外的一种图形菱形属于是一类,你可以说菱形就是矩形的一种.不过它们的特征是完全不一样的,而且长得也 ...

最新文章

  1. 微软重新释出MS10-015 解决蓝屏问题
  2. mpvue 踩坑之src数据绑定出错
  3. textarea 通过 json在各浏览器的显示回车换行的问题
  4. 为拯救爸妈朋友圈,达摩院造了“谣言粉碎机” 1
  5. cesium 经纬度绘制点_炫酷大屏地图自定义绘制(一)
  6. python微控制器编程从零开始 pdf_Python极客项目编程_(美)Mahesh Venkitachalam.pdf
  7. BP神经网络——从二次代价函数(Quadratic cost)到交叉熵(cross-entropy cost)代价函数
  8. [转载] python计时函数timeit.timeit()使用小结
  9. 相机标定 棋盘格 图_【连载2.3.1】结构光系统标定
  10. node连接数据库_数据库2
  11. html固定按钮相对位置,css固定定位和绝对定位的区别是什么?
  12. Nano配置永久静态IP
  13. 10个程序员可以接私活的平台和一些建议
  14. todd li 保留_用Todd Motto对JavaScript进行解密
  15. java http 手机浏览器下载word文档失败的问题
  16. 自定义View实现雨点洒落效果
  17. 网易被裁后,68天吃透这份阿里学长甩我的Android面试笔记,竟让我收到字节跳动和小米offer
  18. 魅族android10内测答案,魅族Flyme9内测答案
  19. 傻妞sillyGirl对接VLW微信机器人
  20. java获取中文字符串汉语拼音和首字母

热门文章

  1. rj45带滤波器20/05的数字是什么意思_「手机维修自学教程」认识手机射频电路中的滤波器 维修技巧分析...
  2. linux内核态串口读写程序,linux 0.11 内核学习 -- rs_io.s,串口汇编代码
  3. 2021/6/18~19 每天学习python 30分钟 -了解python - python的基本变量概述
  4. nginx编译安装,nginx静态资源访问和负载均衡的使用!
  5. 武汉加油!总有那么一个声音让我们感动,总有那些英雄在为难时刻挺身而出,像英雄们致敬。陈老师《大国风范》演讲视频...
  6. 射频篇(三) 模拟、射频器件学习(3) ——锁相环(PLL)
  7. 【蚁群路径规划】基于MATLAB的蚁群算法的二维路径规划
  8. 【LDPC/STBC】基于LDPC/STBC编译码的图像传输系统的MATLAB仿真
  9. linux下tty, ttyn, pts, pty, ttySn, console理解
  10. Python入门篇-高级数据类型集合(set)和字典(dict)