數據結構--單調棧--求最大子矩陣的大小
求最大子矩陣的大小
給定一個整型矩陣map, 其中的值只有0和1兩種, 求其中全是1的所有矩形區域中, 最大的矩形區域為1的數量。
例如:
1 1 1 0
其中, 最大的矩形區域有3個1, 所以返回3。
再如:
1 0 1 1
1 1 1 1
1 1 1 0
其中, 最大的矩形區域有6個1, 所以返回6。
解:將其放到一個矩陣中,同時從第0行開始計算,以該行打底時,直方圖的最大面積
如第0行,數組為[1, 0, 1, 1] 此時按照下面的求直方圖最大面積。
然後以第1行打底,此時數組為[2, 1, 2, 2],同理求直方圖最大面積
然後以第2行打底,此時數組為[3, 2, 3, 0]
註:數組的大小是按照它這一行開始,一列中有多少個連續的1來計算的。
類似的題目:給定一個數組,表示的是每個位置的直方圖的高度,求直方圖中連續部分的最大面積
解:利用單調棧,構成一個有棧底到棧頂是從小到大的結構,當要入棧的元素num小於棧頂元素時,棧頂元素出棧,同時對該元素左右能到達的邊界進行記錄,這樣以這個元素為中心的面積就可以求出來了。
數據結構--單調棧--求最大子矩陣的大小
相關推薦
數據結構--單調棧--求最大子矩陣的大小
最大的 其中 矩陣 直方圖 行記錄 str ont http 圖片 求最大子矩陣的大小給定一個整型矩陣map, 其中的值只有0和1兩種, 求其中全是1的所有矩形區域中, 最大的矩形區域為1的數量。例如:1 1 1 0其中, 最大的矩形區域有3個1, 所以返回3。再如:1 0
單調棧 求最大子矩陣的大小
#include<iostream> #include<stdio.h> #include<stack> using namespace std; template<class T> int length(T& arr) { return siz
ACM數據結構-單調棧、隊列
put inf n-n www. lld queue can org strong 1.最大數 代碼: #include <stdio.h> #include <memory.h> #include <math.h> #include
數據結構--單調棧結構
null 不彈出 入棧 圖片 TP 彈出 一個 img -- 解決的問題:在一個數組中,每一個位置的num,找到左邊離num近的>num的值,和右邊離num近的>num的值 時間復雜度:O(N) 準備一個棧:棧底到棧頂 從大到小 遍歷數組,將數組中的元素n
數據結構--單調棧--烽火臺
設計 倒數 行為 筆試 https 通路 eight git 能夠 京東筆試編程題:烽火臺,動態規劃解法| Hexo https://www.nowcoder.com/discuss/8704?type=0&order=0&pos=5&page=0
poj1924(單調棧求最大矩陣)
urn can memset using for color 矩陣 ring std #include<cstdio> #include<cstring> #include<algorithm> using namespace std;
資料結構與演算法——求最大子矩陣問題
原題:給定一個整形矩陣map。其中的值只有0和1兩種,求其中全是1的所有矩形區域中,最大的矩形區域為1的數量。 變形題1: 有一個直方圖,用一個整數陣列表示,其中每列的寬度為1,求所給直方圖包含的最大矩形面積。比如,對於直方圖[2,7,9,4],它所包含的最大矩形的面積為14(即[7,9
imooc數據結構探險-棧篇 棧應用括號匹配二 由群友啟發改良james_yuan老師算法
false blog default img pstack 一個 alt 是否 logs 如圖所示 引用群友內容 //老師代碼有點麻煩了,不用聲明兩個mystack的,直接判斷是否是左括號, //是的話就在mystack中push另一半括號;如果是右括號且又不是需要
數據結構之棧
class 個數 urn nbsp bottom height enter isp 頭指針 棧的基本概念 定義:棧(Stack) 是限制僅在表的一端進行插入和刪除操作的線性表。 允許進行插入和刪除的一端稱為棧頂(top) 不允許插入和刪除的一端稱為棧底(bo
數據結構--順序棧的實現
數制轉換 struct while 轉換 ktr -- eas 進制數 spa 最近在看嚴蔚敏的數據結構,以下是參照 http://blog.csdn.net/WLxinliang/article/details/52894338 手寫的順序棧的實現代碼: 1.頭文件定義
【轉】數據結構中棧和堆---內存分配中棧和堆
heap 元素 部分 程序 記錄 ptr 區域 sdn 頭部 一、數據結構的棧和堆 首先在數據結構上要知道堆棧,盡管我們這麽稱呼它,但實際上堆棧是兩種數據結構:堆和棧。堆和棧都是一種數據項按序排列的數據結構。 1)棧就像裝數據的桶或箱子 我們先從大家比較熟悉的棧說起吧
PTA 數據結構 一元多項式求導 (僅供參考)
僅供參考 struct -o sca scanf scan -1 can 數組 請勿粘貼 輸入格式: 以指數遞降方式輸入多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。 輸出格式: 以與輸入相同的格式輸出導數多項式非零項的系數和指數。數字間以空格
大話數據結構——使用棧實現簡單的四則運算
return flag system rar sub [0 contains ati convert 最近在讀《大話數據結構》,裏面有個例子是使用棧實現四則運算,現在我用java把這個功能實現試試 代碼如下: package com.datastruct; import
數據結構的棧和堆和程序中的堆和棧
可能 ont 剩余空間 turn ati 引用 遍歷 spa 下一條 在計算機領域,堆棧是一個不容忽視的概念,我們編寫的C語言程序基本上都要用到。但對於很多的初學著來說,堆棧是一個很模糊的概念。堆棧:一種數據結構、一個在程序運行時用於存放的地方,這可能是很多初學者的認識,因
數據結構——用棧來判斷回文字符串
判斷回文 遍歷 next truct turn 遍歷字符串 return std 回文 #include<iostream>#include<string>typedef int Status;using namespace std;typedef
Java數據結構之棧
java 數據結構 棧 package com.xingej.algorithm.datastructure.stack; /** * 數據結構之棧Stack * * 以long類型為測試用例 * * @author erjun 2017年12月4日 下午10:22:34 */
淺入淺出數據結構(24)——最短路徑問題
簡單的 如何 指向 生效 解決 src 簡寫 關鍵字 單源最短路徑 上一篇博文我們提到了圖的最短路徑問題:兩個頂點間的最短路徑該如何尋找?其實這個問題不應該叫“最短”路徑問題,而應該叫“最便宜”路徑問題,因為有時候我們會為圖中的邊賦權(weight),也叫權重,相當於經
淺入淺出數據結構(25)——最小生成樹問題
相交 其他 無向圖 基本 成本 不存在 自身 技術分享 回顧 上一篇博文我們提到了圖的最短路徑問題:http://www.cnblogs.com/mm93/p/8434056.html。而最短路徑問題可以說是這樣的一個問題:路已經修好了,該怎麽從這兒走到那兒?但是在和圖
數據結構(棧,隊列,鏈表,二叉樹)
左右 stl contain ++ 訪問 元素 mes 進入 方法 棧 棧作為一種數據結構,用途十分廣泛。在回調函數等許多場景中都有應用。我們需要了解它的基本用途,那就是先進後出和隊列的先進先出正好相反。 最近在學習數據結構和算法,於是自己來實現。我特別喜歡C語言的指針,我
數據結構11: 棧(Stack)的概念和應用及C語言實現
next ret 額外 轉換 lib 順序存儲 順序棧 就是 函數 棧,線性表的一種特殊的存儲結構。與學習過的線性表的不同之處在於棧只能從表的固定一端對數據進行插入和刪除操作,另一端是封死的。 圖1 棧結構示意圖 由於棧只有一邊開口存取數據,稱開口的那一端