leetcode - Maximal Rectangle
2013-04-28 18:47 张汉生 阅读(290) 评论(0) 编辑 收藏 举报题目描述:点击此处
利用到前面的一个题目的函数。
1 class Solution { 2 public: 3 int largestRectangleArea(int hgt[], int n) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if (n<=0) 7 return 0; 8 bool * flag = new bool[n]; 9 int i, j; 10 for (i=0; i<n; i++){ 11 flag[i] = false; 12 } 13 int rlt = 0; 14 for (i=0; i<n; i++){ 15 if (flag[i]) 16 continue; 17 if (rlt/(n-i) >= hgt[i]) 18 continue; 19 int minH = hgt[i]; 20 int area = hgt[i]; 21 for (j=i+1; j<n; j++){ 22 if (hgt[j] >= minH){ 23 area += minH; 24 } 25 else{ 26 flag[j] = true; 27 if (area>rlt) 28 rlt = area; 29 if (hgt[j]<=rlt/(n-i)) 30 break; 31 minH = hgt[j]; 32 area = hgt[j]*(j-i+1); 33 } 34 } 35 if (area>rlt) 36 rlt = area; 37 } 38 delete []flag; 39 return rlt; 40 } 41 int maximalRectangle(vector<vector<char> > &matrix) { 42 // Start typing your C/C++ solution below 43 // DO NOT write int main() function 44 if (matrix.size()<=0 || matrix[0].size()<=0){ 45 return 0; 46 } 47 int m = matrix.size(); 48 int n = matrix[0].size(); 49 int i, j; 50 int ** ma = new int* [m]; 51 i = 0; 52 for (vector<vector<char> > ::iterator vvci = matrix.begin(); vvci!=matrix.end(); vvci++){ 53 ma[i] = new int[n]; 54 j = 0; 55 for (vector<char>::iterator vci = (*vvci).begin(); vci!=(*vvci).end(); vci++){ 56 if (*vci =='0') 57 ma[i][j] = 0; 58 else { 59 if (j>0) 60 ma[i][j] = ma[i][j-1] +1; 61 else ma[i][j] =1; 62 } 63 j++; 64 } 65 i++; 66 } 67 int * rowA = new int[m]; 68 int rlt = 0; 69 for (i=0; i<n; i++){ 70 for (j=0; j<m; j++) 71 rowA[j] = ma[j][i]; 72 int temp = largestRectangleArea(rowA, m); 73 if (temp > rlt) 74 rlt = temp; 75 } 76 for (i=0; i<m; i++) 77 delete []ma[i]; 78 delete []ma; 79 delete []rowA; 80 return rlt; 81 } 82 };