Hard
Given an array of integers heights
representing the histogram’s bar height where the width of each bar is 1
, return the area of the largest rectangle in the histogram.
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
/**
* @param {number[]} heights
* @return {number}
*/
var largestRectangleArea = function(heights) {
let stack = []
let maxArea = 0
let index = 0
while (index < heights.length) {
if (stack.length === 0 || heights[stack[stack.length - 1]] <= heights[index]) {
stack.push(index++)
} else {
let top = stack.pop()
let area = heights[top] * (stack.length === 0 ? index : index - stack[stack.length - 1] - 1)
maxArea = Math.max(maxArea, area)
}
}
while (stack.length > 0) {
let top = stack.pop()
let area = heights[top] * (stack.length === 0 ? index : index - stack[stack.length - 1] - 1)
maxArea = Math.max(maxArea, area)
}
return maxArea
};
export { largestRectangleArea }