01矩阵最大正方形面积
题意:给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形。
题解:动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来。如果以元素a(i, j)为右下角的正方形边长为b,那么以a(i-1, j)为右下角的正方形边长肯定为b-1,且以a(i, j-1)为右下角的正方形边长为b-1,否则正方形的边不完整。

01矩阵最大矩形面积
转换成每行的直方图最大矩形面积


直方图最大矩形面积
题解:

  1. 创建一个空栈
  2. 从第一个矩形条开始,对每个矩形条的高度height[i] (i的取值范围是[0,n-1])执行下面两步
    a) 如果栈为空,或height[i]大于等于栈顶元素,那么将矩形条i压入栈中。
    b) 如果输入的矩形条高度小于栈顶元素高度,那么将栈顶元素在输入数组中的索引tp出栈,然后计算矩形面积。矩形的高为height[tp],而右边界为i,左边界为当前栈顶元素对应的索引,若栈为空,则宽度就是i。
  3. 经过计算后,栈非空,然后将栈中元素逐个弹出,并按照步骤2计算矩形面积,并且更新最大值。
    参考:https://blog.csdn.net/Revivedsun/article/details/52420679
import java.util.Stack;public class demo6 {public static void main(String args[]){int[][] arr={{1 ,0, 1, 0 ,0},{1 ,1 ,1 ,1 ,1},{1, 1, 1 ,1, 1},{1 ,0 ,0 ,1 ,0}};//求01矩阵最大正方形面积int maxSquareSize = findMaxSquareSize(arr);System.out.println(maxSquareSize);//求01矩阵最大矩形面积int maxRectangleSize = findMaxRectangleSize(arr);System.out.println(maxRectangleSize);}/** 给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形。* 动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来。如果以元素a(i, j)为右下角的正方形边长为b,* 那么以a(i-1, j)为右下角的正方形边长肯定为b-1,且以a(i, j-1)为右下角的正方形边长为b-1,否则正方形的边不完整。* dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]))+1;* @param arr* @return*/private static int findMaxSquareSize(int[][] arr) {if(arr==null||arr.length==0) return 0;int rows = arr.length;int cols = arr[0].length;int len = 0;int[][] dp = new int[rows+1][cols+1];for(int i=1;i<=rows;i++) {for(int j=1;j<=cols;j++) {if(arr[i-1][j-1]==1) {dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]))+1;len = Math.max(dp[i][j],len);}}}return len*len;}/**在一个M * N的矩阵中,所有的元素只有0和1, 找出只包含1的最大矩形。* 转换成每一行的直方图最大矩阵面积* @param matrix* @return*/public static int findMaxRectangleSize(int[][] matrix) {if (matrix.length == 0)return 0;int[] heights = new int[matrix[0].length];int max = 0;for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[0].length; j++) {if (matrix[i][j] == 1)heights[j] += 1;elseheights[j] = 0;}max = Math.max(max, findMaxRectangleSizeSingleRows(heights));}return max;}/**一个直方图是由许多矩形组成,在给定的直方图中找出最大的矩形面积。* 1.创建一个空栈* 2.从第一个矩形条开始,对每个矩形条的高度height[i] (i的取值范围是[0,n-1])执行下面两步 * a) 如果栈为空,或height[i]大于等于栈顶元素,那么将矩形条i压入栈中。 * b)如果输入的矩形条高度小于栈顶元素高度,那么将栈顶元素在输入数组中的索引tp出栈,然后计算矩形面积。* 矩形的高为height[tp],而右边界为i,左边界为当前栈顶元素对应的索引,若栈为空,则宽度就是i。* 3.经过计算后,栈非空,然后将栈中元素逐个弹出,并按照步骤2计算矩形面积,并且更新最大值。* @param arr* @return*/public static int findMaxRectangleSizeSingleRows(int[] arr) {if(arr==null||arr.length==0) return 0;Stack<Integer> stack = new Stack<>();int maxSize = 0;int curSize = 0;int curHeight = 0;int n = arr.length;int i = 0;while(i<n) {if(stack.empty()||arr[stack.peek()]<=arr[i]) {stack.push(i++);}else {curHeight = arr[stack.pop()];curSize = curHeight*(stack.empty()?i:i-stack.peek()-1);maxSize = Math.max(maxSize, curSize);}}while(!stack.empty()) {curHeight = arr[stack.pop()];curSize = curHeight*(stack.empty()?i:i-stack.peek()-1);maxSize = Math.max(maxSize, curSize);}return maxSize;}}

01矩阵最大正方形面积、01矩阵最大矩形面积、直方图最大矩形面积相关推荐

  1. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

    题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...

  2. 矩阵相乘的理解(矩阵相乘的几何意义)及证明过程

    矩阵相乘的理解 1.基底的理解 2.证明过程 3.公式分析 3.1分析 3.2 3.2.1 n3=n2n3=n2n3=n2 时: 3.2.2 n3<n2n3<n2n3<n2 时: 3 ...

  3. 特征值与特征向量、特征方程、特征多项式、矩阵相似、相似变换、矩阵对角化、奇异值分解(Singular Value Decomposition)手算加MATLAB

    特征值(Eigenvalue)与特征向量(Eigenvector)   定义:若AAA为n×nn\times nn×n的矩阵,xxx为非零向量,若存在数λ\lambdaλ使得Ax=λxAx=\lamb ...

  4. matlab 矩阵 异或,MATLAB在矩阵上的运算

    本文概述 目的:研究矩阵的算术运算, 矩阵的关系运算和矩阵的逻辑运算. 算术运算符 Operations MATLAB Form Comments 数组加法 a+b 数组和矩阵加法相同 数组减法 a- ...

  5. 单应矩阵,基本矩阵,本质矩阵

    1.归一化图像坐标 2.本质矩阵 essential matrix 2.1 本质矩阵的推导 2.2特点 3.相机内参 4.基本矩阵 fundamental matrix 4.2基本矩阵推导 4.1特点 ...

  6. 【数学】对向量的求导和Jacobian矩阵的几何意义与Hessian矩阵

    算是上一篇[数学]均匀分布生成其他分布的方法的一个数学基础补遗吧. 函数对向量求导 Jacobian矩阵相当于通用型的函数的一阶导数,Hessian矩阵是一个Rn→RR^n \to R的函数的二阶导数 ...

  7. 辨析波士顿矩阵(BCG Matrix) 、GE矩阵(GE Matrix/Mckinsey Matrix)和战略定位分析SPAN

    辨析波士顿矩阵(BCG Matrix) .GE矩阵(GE Matrix/Mckinsey Matrix)和战略定位分析SPAN 本文作者 | 谢宁,<华为战略管理法:DSTE实战体系>.& ...

  8. 线性代数矩阵行列式_非平方矩阵的行列式| 使用Python的线性代数

    线性代数矩阵行列式 Prerequisites: 先决条件: Defining a Matrix 定义矩阵 Determinant of a Matrix 矩阵的行列式 Note: Determina ...

  9. 算法刷题打卡第76天:判断矩阵是否是一个 X 矩阵

    判断矩阵是否是一个 X 矩阵 难度:简单 如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 : 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n ...

最新文章

  1. Cerebras发布全球首个人类大脑规模的AI解决方案
  2. 编程之美-队列中取最大值操作问题
  3. ASP.Net MVC的学习
  4. Android成长日记-使用GridView显示多行数据
  5. 将visio的图片插入latex(png格式转换成eps格式图片)
  6. Github(3)-本地文件管理
  7. 如何整一个厉害的产品slogan?
  8. 小P寻宝记——好基友一起走
  9. java 字符串 字节数组_字符串到字节数组,字节数组到Java中的字符串
  10. IPv4与IPv6数据报格式详解
  11. 参加东方道迩2010用户大会的归来总结
  12. 相机视场角和焦距_相机视场角估计
  13. oracle11g shrink,shrink lob
  14. 中学数学知识点实体识别
  15. 什么样的企业要使用360评估?
  16. Oracle中字符串截取最全方法总结
  17. 如何制定人生目标体系
  18. 那些年我们对Spark RDD的理解
  19. 2022年在家安装一个监控摄像头需要多少成本
  20. 使用python编写的落网电台下载工具

热门文章

  1. ESP8266 网络服务器仪表显示传感器读数
  2. 关于数据库事务隔离级别的介绍
  3. JAVA开发运维(Jenkins中踩的坑)
  4. CGB2105-Day16
  5. 高中信息技术python及答案_高中信息技术《Python语言》模块试卷.doc
  6. 水管局长数据加强版:lct,时光倒流,最小生成树,边化点
  7. 云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警
  8. Biodiversity and Ecosystem Functioning(生物多样性和生态系统功能)
  9. 远程通信及AIO、BIO、NIO初级讲解
  10. 如何用NLP技术和标题党说拜拜-文本摘要