import java.util.Stack; class Solution { public int largestRectangleArea(int[] heights) { Stack stack = new Stack<>(); int start; int index; int height; int[] element; int maxArea = 0; for (int i = 0; i < heights.length; i++) { start = i; while (!stack.isEmpty() && stack.peek()[1] > heights[i]) { element = stack.pop(); index = element[0]; height = element[1]; maxArea = Math.max(maxArea, height * (i - index)); start = index; } stack.push(new int[]{start, heights[i]}); } while (!stack.isEmpty()) { element = stack.pop(); index = element[0]; height = element[1]; maxArea = Math.max(maxArea, height * (heights.length - index)); } return maxArea; } }