您的位置:首页 > 其它

leetcode 85. Maximal Rectangle

2016-06-03 17:57 471 查看
public int maximalRectangle(char[][] matrix) {

if(matrix == null || matrix.length==0|| matrix[0].length==0) return 0;//记住逻辑或和逻辑与有短路的,要先判断if条件的优先级
int n = matrix.length;//行数
int m = matrix[0].length;//列数
int maxA = 0;
int[] heights = new int[m];//设置每一列的高度
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i==0){
heights[j] = matrix[0][j] - '0';//初始化,因为matrix为char型,要转换
}else
if(matrix[i][j]=='1'){
heights[j] = heights[j] + 1;
}else{
heights[j] = 0;
}
}
maxA = Math.max(maxA,largestRectangleArea(heights));//逐行求出每一行的区域,取最大值
//if()

}
return maxA;
}
或者为每一个矩阵元素设置一个高度值,然后计算改行不同高度值之间最大矩形区域(因为上一题每个直方图的宽度为1,正好符合列索引间的大小关系,故可将上一题求一位数组高度
的算法,放到这道题中,将矩阵分解为求每一行的一位数组高度的最大矩形区域,并逐行求最值


<pre name="code" class="java"> public int maximalRectangle(char[][] matrix) {

if(matrix == null || matrix.length==0|| matrix[0].length==0) return 0;//记住逻辑或和逻辑与有短路的,要先判断if条件的优先级
int n = matrix.length;//行数
int m = matrix[0].length;//列数
int maxA = 0;
int[][] heights = new int
[m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i==0){
heights[0][j] = matrix[0][j] - '0';//初始化,因为matrix为char型,要转换,所以用字符‘0’
}else
if(matrix[i][j]=='1'){
heights[i][j] = heights[i-1][j] + 1;
}else{
heights[i][j] = 0;
}
}
maxA = Math.max(maxA,largestRectangleArea(heights[i]));

}
return maxA;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: