Given an array of integers
Example 1:
Input: heights = [2,1,5,6,2,3] Output: 10 Explanation: The above is a histogram where width of each bar is 1. The largest rectangle is shown in the red area, which has an area = 10 units.
Example 2:
Input: heights = [2,4] Output: 4
Constraints:
1 <= heights.length <= 105 0 <= heights[i] <= 104
Solution
和 42. Trapping Rain Water 相似的題目,可以用 stack 來解
但是過程中的檢查條件不一樣(參考)
在這邊的 stack 變成是一個遞增序列
當目前高度比stack的top低的時候,可以看成找到一個局部的最高
這時候開始往前找高度,並計算從該高度往右可以組成多少面積
為什麼是往右,因為 stack 是一個遞增序列,且局部最高的值會在最右邊
因此往右才可以圍出最大的面積
然後往前檢查的終止條件是,stack 的 top 必須高於目前 index 指向的高
這樣才可以保持往右和局部最高圍出面積這個條件的成立
kotlin
沒有留言:
張貼留言