力扣 C++11题解系列-084 最大矩形
今天小编给各位分享rectangle的知识,文中也会对其通过力扣 C++11题解系列-084 最大矩形和力扣题解之:最长公共前缀等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!
内容导航:
一、力扣 C++11题解系列-084 最大矩形
题目给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6
解题代码与测试//// Created by tannzh on 2020/8/22.///* * 最大矩形给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6 */#include <iostream>#include <vector>#include <stack>#include <algorithm>using std::max;using std::min;using std::stack;using std::vector;class Solution {public: int maximalRectangle(vector<vector<char> > &matrix) { if (matrix.empty()) return 0; int max_area = 0; vector<int> height(matrix[0].size(), 0); for (size_t i=0; i<matrix.size(); ++i) { for (size_t j=0; j<matrix[0].size(); ++j) if (matrix[i][j] == '0') height[j] = 0; else ++height[j]; max_area = max(max_area, largestRectangleArea(height)); } return max_area; }private: int largestRectangleArea(vector<int> &height) { int max_area = 0, i = 0, size = height.size(); for (stack<int> stk; i<size || !stk.empty(); ) if (stk.empty() || (i != size && height[stk.top()] <= height[i])) stk.push(i++); else { int tp = stk.top(); stk.pop(); max_area = max(max_area, height[tp] * (stk.empty() ? i : i-stk.top()-1)); } return max_area; }};int main(int argc, char **argv){ std::vector<std::vector<char>> matrix = { {'1', '0', '1', '0', '0'}, {'1', '0', '1', '1', '1'}, {'1', '1', '1', '1', '1'}, {'1', '0', '0', '1', '0'} }; Solution s; std::cout << s.maximalRectangle(matrix) << std::endl; return 0;}
解题思路分析0 1 0 01 1 1 00 1 1 00 0 1 00 1 0 0
对于上述这个矩阵,我们人脑是如何第一时间发现中间那坨 1 的呢?我觉得应该有下面这个过程:
_0 1 0 0 | |_1 1 1 0 |*|*|0 1 1 0 |*|*|---------------0 0 1 00 1 0 0
首先一眼排除掉虚线下面的可能性,而上面的部分,怎么看怎么像是 [114. Largest Rectangle in Histogram](../114. Largest Rectangle in Histogram) 的图。显然如果将层数累加,则成了 height 这个 vector 了。
0 3 2 0
这就完全成了 114 题的解答了。
所以这道题比较偷懒的方法,是直接使用 114 题里的 largestRectangleArea 方法。并构建出 height 这个 vector 即可。
大部分童鞋和我一样,遇到这道题的时候,还没遇到 114, 那么灵感应该不会那么突然,常规的思路应该还是 DP。
一、力扣题解之:最长公共前缀
编写一个函数来查找字符串数组中的 最长公共前缀 。如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0
爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。