89 柱状图中最大的矩形

柱状图中最大的矩形


给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。
在这里插入图片描述
提示:

  • 1 <= heights.length <= 1 0 5 10^5 105
  • 0 <= heights[i] <= 1 0 4 10^4 104

类似接雨水(反过来,相当于找接雨水最少的一段)

题解1 暴力搜索(超时) O ( N 2 ) O(N^2) O(N2)

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();int maxs = 0;for(int l = 0; l < s; l++){int minL = INT_MAX;for(int r = l; r < s; r++){minL = min(minL, heights[r]);maxs = max(maxs, minL*(r-l+1));}}return maxs;}
};

另一种

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();int maxs = 0;for(int i = 0; i < s; i++){int l = i;int r = i;int tmph = heights[i];while(l >= 1 && heights[l-1] >= tmph)--l;while(r + 1 < s && heights[r+1] >= tmph)++r;maxs = max(maxs, (r-l+1)*tmph);}return maxs;}
};

题解2 单调栈【重点学习】

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();stack<int> stk; // 单调栈,下标对应值保持非严格递增vector<int> l(s, -1), r(s, s);int maxs = 0;// 从左向右// 找到离i最近的 < hegihts[i]的左边界for(int i = 0; i < s; i++){while(stk.size() && heights[stk.top()] >= heights[i])stk.pop();l[i] = (stk.empty() ? -1 : stk.top());stk.push(i);}stk = stack<int>();// 从右向左// 找到离i最近的 < hegihts[i]的右边界for(int i = s-1; i >= 0; i--){while(stk.size() && heights[stk.top()] >= heights[i])stk.pop();r[i] = (stk.empty() ? s : stk.top());stk.push(i);}for(int i = 0; i < s; i++){// 使用单调栈的初衷: 以height[i]为高度的矩形对应的宽 = r[i]-l[i]maxs = max(maxs, heights[i]*(r[i]-l[i]-1));}return maxs;}
};

在这里插入图片描述

常数优化

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();stack<int> stk; // 单调栈,下标对应值保持非严格递增vector<int> l(s, -1), r(s, s);int maxs = 0;// 从左向右for(int i = 0; i < s; i++){while(stk.size() && heights[stk.top()] >= heights[i]){r[stk.top()] = i;stk.pop();}l[i] = (stk.empty() ? -1 : stk.top());stk.push(i);}for(int i = 0; i < s; i++){maxs = max(maxs, heights[i]*(r[i]-l[i]-1));}return maxs;}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/157560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python调用飞书机器人发送文件

当前飞书webhook机器人还不支持发送文件类型的群消息&#xff0c;可以申请创建一个机器人应用来实现群发送文件消息。 创建机器人后&#xff0c;需要开通一系列权限&#xff0c;然后发布。由管理员审核通过后&#xff0c;才可使用。 包括如下的权限&#xff0c;可以获取群的c…

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图…

OpenCV 笔记(4):图像的算术运算、逻辑运算

Part11. 图像的算术运算 图像的本质是一个矩阵&#xff0c;所以可以对它进行一些常见的算术运算&#xff0c;例如加、减、乘、除、平方根、对数、绝对值等等。除此之外&#xff0c;还可以对图像进行逻辑运算和几何变换。 我们先从简单的图像加、减、逻辑运算开始介绍。后续会有…

使用Objective-C和ASIHTTPRequest库进行Douban电影分析

概述 Douban是一个提供图书、音乐、电影等文化内容的社交网站&#xff0c;它的电影频道包含了大量的电影信息和用户评价。本文将介绍如何使用Objective-C语言和ASIHTTPRequest库进行Douban电影分析&#xff0c;包括如何获取电影数据、如何解析JSON格式的数据、如何使用代理IP技…

轻松搭建Nextcloud私有云盘并实现远程访问【内网穿透】

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

搜维尔科技:scalefit生物力学人体工学软件分析!

人体工程学分析 21加载参数和头像显示 识别(隐藏的)健康风险 根据DGUV交通灯进行生物反馈(DIN/ISO) 实时应力分析 三维空间可视化 静态/动态肩载 用左/右赋值加载输入 腰椎间盘压缩计算 距离和定时器显示 带有运动跟踪的化身/视频叠加 外骨骼与CAD工作站仿真 CSV原始…

不只保护隐私的防窥膜,还是屏幕的小铠甲

电脑防窥膜这种东西确实很实用&#xff0c;尤其是那些经常在公共场所用笔记本的朋友&#xff0c;更是需要这张贴膜的保护&#xff0c;不过虽然现在市面上这种防窥膜种类繁多&#xff0c;但是产品质量良莠不齐。有些防窥膜虽然有防窥效果&#xff0c;但透光率下降太多了&#xf…

在Qt中List View和List Widget的区别是什么,以及如何使用它们

2023年10月29日&#xff0c;周日晚上 目录 List View和List Widget的区别 如何使用QListView 如何使用QListWidget List View和List Widget的区别 在Qt中&#xff0c;QListView 和 QListWidget 是用于显示列表数据的两个常用控件&#xff0c;它们有一些区别和特点。 1. 数…

免费(daoban)gpt,同时去除广告

一. 内容简介 免费(daoban)gpt&#xff0c;同时去除广告&#xff0c;https://chat18.aichatos.xyz/&#xff0c;也可当gpt用&#xff0c;就是有点广告&#xff0c;大家也可以支持一下 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 …

opengl基础笔记1

1、opengl运行模式及opengl规范 运行模式&#xff1a;核心模式与立即渲染模式&#xff08;弃用&#xff09; 由于OpenGL的大多数实现都是由显卡厂商编写的&#xff0c;当产生一个bug时通常可以通过升级显卡驱动来解决。这些驱动会包括你的显卡能支持的最新版本的OpenGL&#xf…

开放式耳机百元机哪个好、平价又好用的开放式耳机

开放式耳机最近一两年越来越受欢迎&#xff0c;市场上不同形态的非入耳式耳机都有&#xff0c;从骨传导&#xff0c;夹耳式到气传导等等都有。开放式耳机的好处有很多&#xff0c;非入耳式&#xff0c;不伤耳朵&#xff0c;佩戴更舒适更安全。今天就来和大家聊聊开放式耳机百元…

智能井盖传感器推荐,万宾科技助力城市信息化建设

随着科技产品更新换代进程加快&#xff0c;人工智能在人们日常生活之中逐渐普及开来&#xff0c;深入人们生活的方方面面&#xff0c;影响城市基础设施建设工程。例如在大街小巷之中的井盖作为城市基础建设的一个重要部分&#xff0c;一旦出现松动倾斜或凸起等异常问题&#xf…