01矩阵最大正方形面积、01矩阵最大矩形面积、直方图最大矩形面积

本文介绍了如何求解01矩阵中最大正方形面积及最大矩形面积问题,通过动态规划解决01矩阵问题,转换为直方图最大矩形面积并采用栈来找到最大高度的矩形,详细解析了算法思路和实现过程。
摘要由CSDN通过智能技术生成

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.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值