1function largestRectangleArea(heights) {
2 const stack = []; // 单调递增栈,存下标
3 let maxArea = 0;
4 for (let i = 0; i <= heights.length; i++) {
5 const h = i === heights.length ? 0 : heights[i];
6 while (stack.length && heights[stack.at(-1)] > h) {
7 const height = heights[stack.pop()];
8 const width = stack.length ? i - stack.at(-1) - 1 : i;
9 maxArea = Math.max(maxArea, height * width);
10 }
11 stack.push(i);
12 }
13 return maxArea;
14}