6/08/2014

113. Maximal Rectangle

public class Solution {
    public int maximalRectangle(char[][] matrix) {
        int row = matrix.length;
        if (row==0) return 0;
       
        int col = matrix[0].length;
       
        int[][] ones = new int[row][col];
        int max = 0;
       
        for (int i=0; i<row; i++) {
            for(int j=0; j<col; j++) {
                if (matrix[i][j]=='1') {
                    if (j==0) ones[i][j] = 1;
                    else ones[i][j] = ones[i][j-1]+1;
                }
            }
        }
       
        for (int i=0; i<row; i++) {
            for (int j=0; j<col; j++) {
                if (ones[i][j]!=0) {
                    int minI = i;
                    int minWidth = ones[i][j];
                    while (minI>=0) {
                        minWidth = Math.min(minWidth, ones[minI][j]);
                        int area = minWidth*(i-minI+1);
                        max = Math.max(max, area);
                        minI--;
                    }
                }
            }
        }
       
        return max;
    }
}

没有评论:

发表评论