当前位置: 首页 > news >正文

算法Day60 | 84.柱状图中最大的矩形,刷题总结

Day60

    • 84.柱状图中最大的矩形
    • 刷题总结

84.柱状图中最大的矩形

题目链接:84.柱状图中最大的矩形
遍历每个元素,找到左右元素小于当前元素的,以左右元素间的区间(左开右开区间)所围成的面积中的最大值。

数组尾部加一个0:由于单调栈为单调递减,当前元素是在数组元素小于栈顶元素的情况下,才开始弹出的,为了避免栈不弹出(数组默认顺序为单调递增,则不会弹出),因此栈尾需要给一个一定会弹出的数字,因此为0
确保所有的柱子都能被处理到,因为如果柱子的高度都是递增的,那么最后一个柱子可能不会被处理到。

数组首部也需要加一个0:因为小于元素左侧的为栈顶第二元素,也就是为了防止对空栈进行操作,如果栈为空,则表示当前柱子是最小的柱子。但对于vector数组来说,在首部插入元素,很消耗时间,因此可以单独对空栈进行判断,从而避免在首部插入元素。

class Solution {
public:int largestRectangleArea(vector<int>& heights) {heights.push_back(0);//数组尾部加0stack<int> st;int sum = 0;for (int i = 0; i < heights.size(); ++i) {while (!st.empty() && heights[i] < heights[st.top()]) {int cur = st.top();st.pop();int Width = st.empty() ? i/*当栈为空时,直接输出i作为宽度*/ : i - st.top() - 1;sum = max(sum, Width * heights[cur]);}st.push(i);}return sum;}
};

刷题总结

这60天过得飞快。我已养成每天打开CLion、《代码随想录》、B站和CSDN的习惯。刷题不仅让我对数据结构、算法等相关知识有了更深入的了解,还提升了我对C++的使用能力。

每次观看完视频讲解后,我都会亲自动手编写代码,并将其与文章中给出的代码进行比较,从中吸取双方的优点。借助CLion上的LeetCode插件,我对编译器调试功能运用得也更加娴熟。

最重要的是,我学会了对问题进行切入点分析。按照《代码随想录》的刷题顺序进行学习,这种连贯性的方式让我更容易抓住重点,不再东奔西跑,极大地提高了我的做题效率。回头看刷卡记录,每一天都有新的收获,这种满足感弥足珍贵。

http://www.lryc.cn/news/94504.html

相关文章:

  • python实现pdf转换为word文档,尽量保持格式不变
  • TCP / IP 网际层的 4 个重要协议
  • MySQL阶段DAY20(附笔记)
  • 考场作弊行为自动抓拍告警算法 yolov7
  • 在Linux中安装RabbitMQ
  • electron 单个实例控制以及日志输出
  • 基于matlab使用AprilTag标记进行相机校准(附源码)
  • 计算机网络————运输层
  • 【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块
  • 【RPC】—Protobuf入门
  • 【⑩MySQL】:表管理,让数据管理不再困难
  • Springboot项目使用原生Websocket
  • 在Vue 3中如何实现服务端渲染(SSR)
  • 【计算机组成原理期末课设作业】16位微型计算机实现——MOVS串传送扩展指令设计
  • CodeMirror 对 XML 文档熟悉及元素控制自定义
  • Jetpack - ViewModel
  • 【新版系统架构】第十三章-层次式架构设计理论与实践
  • 剖析Linux文件系统
  • 简介Maven结构与配置方法
  • 好用的网址6
  • MySQL数据库---笔记5
  • Yocto:初始
  • autodl算力租用平台应用于pycharm
  • 高德地图的使用
  • <List<Map<String,String>>> 删除元素常见的误区以及删除方法
  • Linux下的编辑器——vim的简单上手指南
  • C++多线程学习(二、多线程的几种创造方式【有返回值的之后讲】)
  • 前端开发框架生命周期详解:Vue、React和Angular
  • 【Java从入门到大牛】程序流程控制
  • UML学习统一建模语言