萤火小屋

优律的知识库

  • 首页
  • 归档
  • 分类
  • 标签
  • 留言
  • 关于

  • 搜索
消息队列 RabbitMQ Redis 双指针 力扣 动态代理 Git YAML SpringBoot SpringMVC 回溯算法 分治算法 归并排序 快排 手撕 事务 MySQL索引 MySQL 小技巧 Spring Framework Spring 动态规划 Linux Android 贪心算法 操作系统 进程调度模拟 IPv6 数据库 计算机组成原理 计算机基础 栈 Java 静态路由 路由器 交换机 数字通信 网络工程 计算机网络 Web http 大学学习技巧 程序设计 算法

力扣第84题-柱状图中最大矩形

发表于 2023-07-22 | 分类于 力扣刷题 | 0 | 阅读次数 20

题目
链接

题解

import java.util.ArrayDeque;
import java.util.Deque;

class Solution {
    public int largestRectangleArea(int[] heights) {
        int len = heights.length;
        // 首尾带哨兵的数组
        int[] arrWithStl = new int[len + 2];
        System.arraycopy(heights, 0, arrWithStl, 1, len);
        len += 2;
        int res = 0;
        // 单调栈,存储下标
        Deque<Integer> stack = new ArrayDeque<>(len);
        // 哨兵入栈
        stack.addLast(0);
        // 遍历数组
        for (int i = 1; i < len; i++) {
            // 如果当前元素严格小于栈顶元素,弹栈并计算其构造的矩形面积
            while (arrWithStl[i] < arrWithStl[stack.peekLast()]) {
                // 高度就是数组存储的值
                int h = arrWithStl[stack.removeLast()];
                // 宽度是当前下标减去栈顶元素下标再减一
                // 因为栈顶元素一定在当前元素的左边,而且一定能扩散到当前元素的左边一个单位
                int w = i - stack.peekLast() - 1;
                // 计算答案
                res = Math.max(h * w, res);
            }
            // 当前元素下标压栈
            stack.addLast(i);
        }
        return res;
    }
}
# 算法 # 程序设计 # 力扣
力扣第152题-乘积最大子数组
力扣第36题-有效的数独
  • 文章目录
  • 站点概览
优律

优律

优律的知识库

125 日志
20 分类
44 标签
E-mail Twitter Instagram
Links
  • CZLisyx - 浮生志
  • Vedfolnir
0%
© 2019 — 2023 萤火小屋——优律的博客网站
网站已勉强运行 
Halo博客系统技术支持