單調棧
解決乙個陣列中,對於每個數,求左邊離它最近的比它大(小)的數,右邊離它最近的比它大(小)的數,時間複雜度o(n)實現。
1.乙個陣列可化為乙個直方圖,陣列內數值代表該位置的高度(邊長為1的小正方形的個數),求這個直方圖可以形成的最大矩形面積(即小正方形個數)。
int
maxrecfrombottom
(vector<
int>
&height)
minstack.
push
(i);
}while
(!minstack.
empty()
)return maxrec;
}
2.對於該題,則從矩陣第一行開始往下,依次借助上面過程求解每一行可以形成的的矩形最大面積,其中最大值即為題解。
例如題中例子,第一行 1 0 1 1,第二行 2 1 2 2 第三行 3 2 3 0
int
maxrecsize
(vector
int>>
&matrix)
maxrec =
max(maxrec,
maxrecfrombottom
(height));
}return maxrec;
}
烽火傳遞
題目:
單調棧結構
題目 給定乙個不含重複數值的陣列,找到每乙個i位置左右兩邊第乙個比arr i 小的值的下標。如果不存在則下標為 1 解暴力解 時間複雜度為n 2 高階 使用單點棧結構,時間複雜度為 o n 單調棧找小的,棧底放較小值 找大的棧底放較大值。如題,找相鄰最近較小,所以棧底到棧頂公升序。遍歷陣列,如果棧為...
單調棧結構
單調棧結構 給定乙個不含有重複值的陣列 arr,找到每乙個 i 位置左邊和右邊離 i 位置最近且值比 arr i 小的位置。返回所有位置相應的資訊。輸入描述 第一行輸入乙個數字 n,表示陣列 arr 的長度。以下一行輸出 n個數字,表示陣列的值。輸出描述 輸出n行,每行兩個數字 l 和 r,如果不存...
單調棧的應用
問題描述 柱狀圖是有一些寬度相等的長方形下端對齊後橫向排列得到的圖形。現在有n個由寬度為1,高度分別為h1,h2,hn的長方形從左到右依次排列組成的柱狀圖。問裡面包含的長方形的最大面積是多少?分析 最容易想到的方法是 討論左端l和右端r。如果確定了長方形的左端l和右端r,那麼最大的可能高度就是min...