tft每日頭條

 > 生活

 > 非齊次方程組有公共解的例題

非齊次方程組有公共解的例題

生活 更新时间:2024-07-20 07:15:10

非齊次方程組有公共解的例題(力扣C11題解系列-084)1

題目

給定一個僅包含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 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0

對于上述這個矩陣,我們人腦是如何第一時間發現中間那坨 1 的呢?我覺得應該有下面這個過程:

_ 0 1 0 0 | |_ 1 1 1 0 |*|*| 0 1 1 0 |*|*| --------------- 0 0 1 0 0 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。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved