日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode-Maximal Rectangle-最大矩形

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode-Maximal Rectangle-最大矩形 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

https://oj.leetcode.com/problems/maximal-rectangle/

一堆0,1矩陣中計(jì)算出由1組成的長(zhǎng)方形的最大面積。

使用了直方圖求最大面積的算法。枚舉每一行p,然后在將一行上的所有列看做朝i>p方向出發(fā)的直方圖,然后在這個(gè)直方圖上用棧存儲(chǔ)遞增序列的那個(gè)一次遍歷算法。最終求得最大值。

class Solution { public:int n,m;vector<vector<char> > a;vector <int> h;int MaxArea(int p){for (int i=0;i<m;i++){h[i]=0;for (int j=p;j<n;j++){if (a[j][i]=='0') break;h[i]++;}}vector <int> l(m);vector <int> r(m);stack <int> st;for (int i=0;i<m;i++){if (st.empty()){l[i]=i;st.push(i);continue;}if (h[i]>h[st.top()]){l[i]=i;st.push(i);continue;}while(!st.empty()){if (h[i]>h[st.top()]) break;l[i]=l[st.top()];st.pop();}st.push(i);}while(!st.empty()) st.pop();for (int i=m-1;i>=0;i--){if (st.empty()){r[i]=i;st.push(i);continue;}if (h[i]>h[st.top()]){r[i]=i;st.push(i);continue;}while(!st.empty()){if (h[i]>h[st.top()]) break;r[i]=r[st.top()];st.pop();}st.push(i);}int res=0;for (int i=0;i<m;i++){res=max(res,(r[i]-l[i]+1)*h[i]);}return res;}int maximalRectangle(vector<vector<char> > &matrix) {n=matrix.size();a=matrix;if (n==0){return 0;}m=matrix[0].size();int res=0;h.resize(m);for (int i=0;i<n;i++){res=max(res,MaxArea(i));}return res;} };

  

轉(zhuǎn)載于:https://www.cnblogs.com/yangsc/p/4011917.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode-Maximal Rectangle-最大矩形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。