84. 柱状图中最大的矩形

  1. class Solution {
  2. public int largestRectangleArea(int[] heights) {
  3. int len = heights.length;
  4. if (len == 0) {
  5. return 0;
  6. } else if (len == 1) {
  7. return heights[0];
  8. }
  9. int[] newHeigths = new int[len + 2];
  10. for (int i = 0; i < heights.length; i++) {
  11. newHeigths[i + 1] = heights[i];
  12. }
  13. heights = newHeigths;
  14. Deque<Integer> stack = new LinkedList<>();
  15. stack.push(0);
  16. int area = 0;
  17. for (int i = 1; i < heights.length; i++) {
  18. while (heights[i] < heights[stack.peek()]) {
  19. // 当前遍历到的严格小于栈顶的
  20. int height = heights[stack.pop()];
  21. int width = i - stack.peek() - 1;
  22. area = Math.max(area, width * height);
  23. }
  24. stack.push(i);
  25. }
  26. return area;
  27. }
  28. }