LeetCode 85 最大矩形

2021-10-05 01:45:30 字數 893 閱讀 7469

先統計一下每乙個塊上面的連續長度,然後列舉一行的連續子段,求面積。如果高有0的,break,因為後續也是0.

class solution 

else

int min_h=int_max;

for(int k=j;k>=0;k--)}}

return ans;

}};

使用單調棧,統計了每塊上面的連續長度,就轉換成,對於乙個快,這個高度左右延伸能延伸多遠。

這個**非常簡潔,非常精妙,只用到乙個方向的遍歷,關鍵在於在向右的時候,通過棧的記錄來做了向左的擴充套件。棧首先存-1,用來做哨兵(表示空),同時棧用來儲存上乙個瓶頸,那麼-1也可以表示為第乙個瓶頸的左端點0。遍歷的時候遇到當前的高度小於這個棧頂的高度的,現在這個位置是棧頂的位置向右能擴充套件的到的位置,那麼棧頂向左能擴充套件的位置就是棧頂的第二個元素的加一位置。更加精妙的地方在於處理相等的情況,如果遇到連續相同的高度,都要彈出,否則向左擴充套件的位置就錯了,同時雖然中間的元素向右擴充套件位置還沒到頭,中間的計算結果不對,但是沒關係,最後乙個元素是對的。所以**很簡潔。

還有最後的處理,最後乙個元素肯定push進棧了,如果大於棧頂,會push,如果小於棧頂,會彈出在push。所以最後迴圈結束後留在棧裡的元素向右能擴充套件的地方都是最後乙個地方。

class solution 

s.push(i);

}while(s.top()!=-1)

}int maximalrectangle(vector>& matrix)

else

height[j]=0;

}inc_stack(height);

}return ans;

}};

LeetCode 85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6此題和上一題的擴充套件,此題給的二維矩陣的每一行向上都形成了乙個直方圖,所以二維矩陣有多少行,就有多少個直方圖...

leetcode85 最大矩形

1.轉換成直方圖的做法 參考 利用leetcode84中的方法來做 首先要將給定的01矩陣轉換成84中的直方圖的樣子。每一行都對應乙個直方圖,且下一行直方圖是由上一行直方圖計算得到的。如果是0,則當前直方圖高為0,如果是1,則當前直方圖高度是上一層對應位置高度 1 1 0 1 0 0 1,0 1,0...

LeetCode 85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6這一題的演算法本質上和84題largest rectangle in histogram一樣,對每一列都求出每...