例题1:leetcode84:柱状图中最大矩形

    1. // 单调栈,栈中存放的是坐标
    2. public int largestRectangleArea(int[] heights) {
    3. int n = heights.length, max = 0;
    4. int[] left = new int[n];
    5. int[] right = new int[n];
    6. Deque<Integer> stack = new ArrayDeque<>();
    7. for(int i = 0; i < n; i++) {
    8. while(!stack.isEmpty() && heights[stack.peek()] >= heights[i]) {
    9. stack.pop();
    10. }
    11. left[i] = stack.isEmpty() == true ? -1 : stack.peek();
    12. stack.push(i);
    13. }
    14. stack = new ArrayDeque<>();
    15. for(int i = n - 1; i >= 0; i--) {
    16. while(!stack.isEmpty() && heights[stack.peek()] >= heights[i]) {
    17. stack.pop();
    18. }
    19. right[i] = stack.isEmpty() == true ? n : stack.peek();
    20. stack.push(i);
    21. }
    22. for(int i = 0; i < n; i++) {
    23. max = Math.max(max, (right[i] - left[i] - 1) * heights[i]);
    24. }
    25. return max;
    26. }