目录
看完之後才知道為甚麼要接在接雨水的後面,整體的性質沒有差多少,但是就是反過來以及高度的計算上改為直接取當前最高的數值,但有一個操作很驚豔,就是前後加上0,因為在這題當中因為要取矩形所以要有前後的值進行計算,如果沒有這個前後加零的處理,就會需要再程式碼裡加上特殊處理,而前後加上0,就有點像是鏈表當中的虛頭節點一樣,加上之後就可以對於題目進行一致性的處理。
- class Solution {
- public:
- int largestRectangleArea(vector<int>& heights) {
- stack<int> st;
- heights.insert(heights.begin(), 0);
- heights.push_back(0);
- st.push(0);
- int result = 0;
- for(int i = 1; i < heights.size(); i++) {
- if(heights[i] > heights[st.top()]){
- st.push(i);
- } else if (heights[i] == heights[st.top()]) {
- st.pop();
- st.push(i);
- } else {
- while(!st.empty() && heights[i] < heights[st.top()]) {
- int mid = st.top();
- st.pop();
- if(!st.empty()) {
- int h = heights[mid];
- int right = st.top();
- int left = i;
- int w = left - right - 1;
- result = max(h * w, result);
- }
- }
- st.push(i);
- }
- }
- return result;
- }
- };
今天自己在想的時候沒有想出來,但是看完影片過後才豁然開朗,以及沒有想到前後加零的操作是如此方便,還需要對這些題目再進行了解與練習才行。
今天大概學習1hr,主要是理解單調遞減以及怎麼去實現。
● 今日学习的文章链接和视频链接
● 84.柱状图中最大的矩形