01矩阵最大正方形面积
题意:给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形。
题解:动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来。如果以元素a(i, j)为右下角的正方形边长为b,那么以a(i-1, j)为右下角的正方形边长肯定为b-1,且以a(i, j-1)为右下角的正方形边长为b-1,否则正方形的边不完整。
01矩阵最大矩形面积
转换成每行的直方图最大矩形面积
直方图最大矩形面积
题解:
- 创建一个空栈
- 从第一个矩形条开始,对每个矩形条的高度height[i] (i的取值范围是[0,n-1])执行下面两步
a) 如果栈为空,或height[i]大于等于栈顶元素,那么将矩形条i压入栈中。
b) 如果输入的矩形条高度小于栈顶元素高度,那么将栈顶元素在输入数组中的索引tp出栈,然后计算矩形面积。矩形的高为height[tp],而右边界为i,左边界为当前栈顶元素对应的索引,若栈为空,则宽度就是i。 - 经过计算后,栈非空,然后将栈中元素逐个弹出,并按照步骤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.