操作类型 数组 链表
    头添加 04 栈和队列 - 图1 04 栈和队列 - 图2
    尾添加 04 栈和队列 - 图3 04 栈和队列 - 图4
    随机访问(查找) 04 栈和队列 - 图5 04 栈和队列 - 图6
    插入 04 栈和队列 - 图7 04 栈和队列 - 图8
    删除 04 栈和队列 - 图9 04 栈和队列 - 图10

    Stack、Queue、Deque、PriorityQueue 源码、API

    1. class Solution {
    2. public:
    3. int largestRectangleArea(vector<int>& heights) {
    4. int n = heights.size();
    5. int ans = 0;
    6. for (int mid = 0; mid < n; ++mid) {
    7. // 枚举高
    8. int height = heights[mid];
    9. int left = mid, right = mid;
    10. // 确定左右边界
    11. while (left - 1 >= 0 && heights[left - 1] >= height) {
    12. --left;
    13. }
    14. while (right + 1 < n && heights[right + 1] >= height) {
    15. ++right;
    16. }
    17. // 计算面积
    18. ans = max(ans, (right - left + 1) * height);
    19. }
    20. return ans;
    21. }
    22. };