[leetcode-85]Maximal Rectangle(c++)
2015-08-09 17:53
591 查看
原题链接
分析:这道题反正我是想不出来,直接看的网友的解题思路,核心思想是将矩阵中1的个数转化成直方图,而直方图在leetcode-84中已经有了解题方案。怎么想到这个方法的,不知道,,,
如何将其转化为直方图?初始元素为0,对每一行,每一列中的每一个元素,如果为1,height[j]++,如果为0,height[j]为0;,这样对于每一行,都找到了最大值。
代码如下:28ms
分析:这道题反正我是想不出来,直接看的网友的解题思路,核心思想是将矩阵中1的个数转化成直方图,而直方图在leetcode-84中已经有了解题方案。怎么想到这个方法的,不知道,,,
如何将其转化为直方图?初始元素为0,对每一行,每一列中的每一个元素,如果为1,height[j]++,如果为0,height[j]为0;,这样对于每一行,都找到了最大值。
代码如下:28ms
[code]class Solution { public: int maxAreaHistograms(int *height,int length){ int max = 0; stack<int> stack; int i = 0; while(i<length){ if(stack.empty()||height[stack.top()]<height[i]) stack.push(i++); else{ int index = stack.top(); stack.pop(); int area = height[index]*(stack.empty()?i:i-stack.top()-1); if(area>max) max = area; } } return max; } int maximalRectangle(vector<vector<char>>& matrix) { int row = matrix.size(); if(row<=0) return 0; int col = matrix[0].size(); if(col<=0) return 0; int *heights = new int[col+1](); heights[col] = 0; int maxArea = 0; for(int i = 0;i<row;i++){ for(int j = 0;j<col;j++){ if(matrix[i][j]=='1') heights[j]++; else heights[j] = 0; } int area = maxAreaHistograms(heights,col+1); if(area>maxArea) maxArea = area; } delete[] heights; return maxArea; } };
相关文章推荐
- 插入排序(C++ 版)
- C语言 判断一个字符串是不是另一个旋转任意位所得
- C语言 喝汽水问题
- C语言标准库函数qsort排序的介绍与使用
- thrift cpp hello world
- C++第一个综合项目
- 对半搜索递归实现 C++
- C++实现基于IO复用模型的echo服务器
- c++使用应用框架
- C++那些细节--static关键字
- [leetcode-84]Largest Rectangle in Histogram(c++)
- C++(Qt)静态成员类undefined reference to “xxx”
- php调用c++程序例子
- C++ class与内存
- LeetCode #2 Add Two Numbers
- LeetCode #1 Two Sum
- C++中虚函数内存布局
- 读书笔记-C++PrimerPlus-8.2.6 对象、继承和引用10.2.5 修改实现
- C++函数模板 模板实例化、具体化
- C语言-01-基本语法