求矩阵的最大子矩阵面积
问题引入——求解直方图中最大的矩形面积
核心思想:让二维数组转换成多层的一维数组,再根据一维数组构建直方图
//主函数,让二维数组转换成多层的一维数组,再根据一维数组构建直方图
public int maxRecSize(int[][] map){
if (map == null || map.length == 0 || map[0].length == 0){
return 0;
}
int maxArea = 0;
int[] height = new int[map[0].length];
for (int i = 0; i < map.length; i++){
for (int j = 0; j < map[0].length; j++){
//如果j的位置为0,则将整个高度变为0,否则就在原来的长度基础上加1
height[j] = map[i][j] == 0 ? 0 : height[j] + 1;
}
//计算每次从第一行向下分层后每一次的最大面积
maxArea = Math.max(maxRecFromBottom(height), maxArea);
}
return maxArea;