代码训练营 day53|LeetCode 42,LeetCode 84

前言

这里记录一下陈菜菜的刷题记录,主要应对25秋招、春招
个人背景
211CS本+CUHK计算机相关硕,一年车企软件开发经验
代码能力:有待提高
常用语言:C++

系列文章目录

第53天 :第十章 单调栈part02


`

文章目录

  • 前言
  • 系列文章目录
    • 第53天 :第十章 单调栈part02
  • 一、今日任务
  • 二、详细布置
      • 42. 接雨水
        • 提示:
        • 样例1:
        • 思路
        • 实战
      • 84.柱状图中最大的矩形
        • 提示:
        • 样例1:
        • 思路
        • 实战
        • 踩坑
    • 总结



一、今日任务

● 42. 接雨水
● 84.柱状图中最大的矩形

二、详细布置

42. 接雨水

题目链接:力扣42
文章讲解:代码随想录

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

提示:

n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105

样例1:
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
思路

这题很经典,码一下,看了题解才知道。

实战
class Solution {
public:int trap(vector<int>& height) {int sum=0;int v;vector<int> left(height.size(),0);vector<int> right(height.size(),0);left[0]=height[0];for(int i=1;i<height.size();i++){left[i]=max(height[i],left[i-1]);}right[height.size()-1]=height[height.size()-1];for(int i=height.size()-2;i>=0;i--){right[i]=max(height[i],right[i+1]);}for(int i=1;i<height.size();i++){v=min(right[i],left[i])-height[i];if(v>0)sum+=v;}return sum; }
};

84.柱状图中最大的矩形

题目链接:力扣84题链接
文章讲解:图文讲解

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

求在该柱状图中,能够勾勒出来的矩形的最大面积。

提示:

1 <= heights.length <=105
0 <= heights[i] <= 104

样例1:
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10   
思路

这题很难。

实战
/*class Solution {
public:int largestRectangleArea(vector<int>& heights) {vector<int> left(heights.size(),0);vector<int> right(heights.size(),0);int maxS=INT_MIN,a=0,mymin=INT_MAX;left[0]=0;/*for(int i=1;i<heights.size();i++){for(int j=i;j>=0;j--)if(heights[j]>=heights[i])left[i]=j;}*//*for(int i=1;i<heights.size();i++){if(heights[i]>heights[left[i-1]])left[i]=i;else if(heights[i]!=0)left[i]=left[i-1];elseleft[i]=i;}right[heights.size()-1]=heights.size()-1;for(int i=heights.size()-2;i>=0;i--){if(heights[i]<heights[right[i+1]])right[i]=i;else if(heights[i]!=0)right[i]=right[i+1];elseright[i]=i;}if(heights.size()==2){if(heights[0]==0||heights[1]==0)return max(heights[0],heights[1]);elsereturn min(heights[0],heights[1])*2;}for(int i=0;i<heights.size();i++){if(heights[i]<mymin)mymin=heights[i];}    for(int i=0;i<heights.size();i++){if(heights[right[i]]==heights[left[i]]){a=max(a,mymin*(right[i]-left[i]+1));}        else{if(right[i]==left[i])a=max(a,heights[i]);elsea=max(a,heights[i]*(right[i]-left[i]));}if(a>maxS){maxS=a;//index=i;}}return maxS;}
};
*/
class Solution {
public:int largestRectangleArea(vector<int>& heights) {int result = 0;stack<int> st;heights.insert(heights.begin(), 0); // 数组头部加入元素0heights.push_back(0); // 数组尾部加入元素0st.push(0);// 第一个元素已经入栈,从下标1开始for (int i = 1; i < heights.size(); i++) {if (heights[i] > heights[st.top()]) { // 情况一st.push(i);} else if (heights[i] == heights[st.top()]) { // 情况二st.pop(); // 这个可以加,可以不加,效果一样,思路不同st.push(i);} else { // 情况三while (!st.empty() && heights[i] < heights[st.top()]) { // 注意是whileint mid = st.top();st.pop();if (!st.empty()) {int left = st.top();int right = i;int w = right - left - 1;int h = heights[mid];result = max(result, w * h);}}st.push(i);}}return result;}
};
踩坑

这题我的做法过不了一部分样例,码一下,后面改。

总结

今天主要学习了单调栈的一系列操作,今天题目难啊
加油,坚持打卡的第53天。

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

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

相关文章

单臂路由实现不同VLAN之间设备通信

转载请注明出处 本实验为单臂路由配置&#xff0c;目的为让不同VLAN之间的设备能够互相通信。 1.首先&#xff0c;按照要求配置两个pc的ip地址&#xff0c;以pc0为例子&#xff1a; 2在交换机创建vlan10和vlan20 3.划分vlan&#xff0c;pc0为vlan10的设备&#xff0c;pc1为vla…

【FL0013】基于SpringBoot和微信小程序的机电公司管理信息系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

Vue3里抽离公共模块进行封装然后通过Vue进行调取

概述 直接使用引入也不是不可以直接进行调取,但是如果想走vue的话下面是解决方案 声明需要被插入的模块 //这里是要被插入的模块 import * as server from "@/axios/server"; //写入到vue里面方便后面从vue里面进行调取 export default {install(app) {app.confi…

2024保姆级微信 AI 机器人教程:如何打造私人和群聊助手

欢迎点击领取 -《前端开发面试题进阶秘籍》&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的&#x1fa9c; 大家好&#xff0c;我是SunnyRun 微信 AI 机器人-人工智能技术&#xff0c;为用户提供服务的自动化系统&#xff1a;具备自然语言处理能…

Android——动态注册广播

BroadcastReceiver 发送一条广播&#xff0c;可以被不同的广播接收者所接收&#xff0c;广播接收者收到广播后再进行逻辑判断。 标准广播 通过 new BroadcastReceiver() 创建广播 通过 registerReceiver() 注册广播 通过 sendBroadcast() 发送广播 通过 unregisterReceiver(…

HyperWorks进阶教程:Altair及其软件介绍

1.1 Altair 简介 Allair是一家全球技术公司&#xff0c;在产品开发、高性能计算和数据智能领域提供软件和云解决方案自1985年成立以来一直致力于为企业的决策者和技术的执行者开发用于仿真分析、优化、信息可视化、流程自动化和云计算的高端技术。Altair 公司的总部位于美国密…

Halcon3D image_points_to_world_plane详解

分三个部分来聊聊这个算子 一,算子的参数介绍 二,算法的计算过程 三,举例实现 第一部分,算子的介绍 image_points_to_world_plane( : : CameraParam, WorldPose, Rows, Cols, Scale : X, Y) 参数介绍: CameraParam,:相机内参 WorldPose 世界坐标系,也叫物体坐标系(成…

使用GetX实现GetPage中间件

前言 GetX 中间件&#xff08;Middleware&#xff09;是 GetX 框架中的一种机制&#xff0c;用于在页面导航时对用户进行权限控制、数据预加载、页面访问条件设置等。通过使用中间件&#xff0c;可以有效地控制用户的访问流程&#xff0c;并在适当条件下引导用户到所需页面。 这…

【人工智能-初级】练习题:matplotlib基础练习30例

文章目录 练习 1: 画折线图练习 2: 画散点图练习 3: 画柱状图练习 4: 画饼图练习 5: 画直方图练习 6: 使用不同线型画折线图练习 7: 多条折线练习 8: 用不同颜色画散点图练习 9: 画堆叠柱状图练习 10: 画带网格的图练习 11: 画带标签的散点图练习 12: 画等高线图练习 13: 在图中…

[java][基础]HTTPTomcatServlet

1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。如下就是通…

CUDA环境安装终极指南——Linux(其它系统也一样)

文章目录 前言检查驱动配置nvcc安装cudnn完活 前言 不用看其它文章了&#xff0c;这篇文章保你不踩任何坑&#xff0c;安装方法简单快速 检查驱动 检查驱动是否安装&#xff0c;输入以下命令 nvidia-smi如果驱动已经安装&#xff0c;则可跳过此步&#xff0c;否则&#xff…

基于MATLAB的身份证号码识别系统

课题介绍 本课题为基于连通域分割和模板匹配的二代居民身份证号码识别系统&#xff0c;带有一个GUI人机交互界面。可以识别数十张身份证图片。 首先从身份证图像上获取0&#xff5e;9和X共十一个号码字符的样本图像作为后续识别的字符库样本&#xff0c;其次将待测身份证图像…

OpenCV—calcHist()函数

void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,SparseMat& hist, int dims,const int* histSize, const float** ranges,bool uniform true, bool accumulate false ); images 输入的数据指针&#xff0c;要具备相同的尺寸和数…

小米内外衣双区洗双洗烘洗衣机:洗出健康,还是洗出“噱头”

大家好&#xff0c;我是小悟。 在我们生活的这个科技飞速发展的时代&#xff0c;没有什么是一成不变的&#xff0c;就连洗衣机都在不断地推陈出新&#xff0c;生怕自己被时代的洪流甩在后面。这不&#xff0c;前不久&#xff0c;小米就又给我们带来了一款“划时代”的产品——…

MATLAB——矩阵操作

内容源于b站清风数学建模 数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/ 目录 1.MATLAB中的向量 1.1向量创建方法 1.2向量元素的引用 1.3向量元素修改和删除 2.MATLAB矩阵操作 2.1矩阵创建方法 2.2矩阵元素的引用 2.3矩阵…

C++STL——list

C教学总目录 list 1、list简介2、构造函数3、迭代器4、访问和容量函数5、修改类函数6、操作类函数 1、list简介 list是带头双向循环链表&#xff0c;也是模板类&#xff0c;使用时要指明类型&#xff0c;包含于头文件<list> 由于list是双向循环链表&#xff0c;在任意位置…

unocss 添加支持使用本地 svg 预设图标,并支持更改大小

安装 pnpm install iconify/utils 在配置文件 unocss.config.ts&#xff1a; presets > presetIcons 选项中 通过 FileSystemIconLoader 加载本地图标&#xff0c;并指定目录。 import presetWeapp from unocss-preset-weapp import { extractorAttributify, transformer…

转换流详解

在Java中&#xff0c;处理文本数据时&#xff0c;我们经常需要将字节流转换为字符流&#xff0c;或者将字符流转换为字节流。这种转换通常用于读取文本文件或将数据从网络传输到应用程序。Java提供了两种主要的转换流&#xff1a;InputStreamReader 和 OutputStreamWriter。 1…

广东网站设计提升你网站在搜索引擎中的排名

在当今网络盛行的时代&#xff0c;拥有一个设计优良的网站&#xff0c;对企业的在线发展至关重要。特别是对于广东地区的企业来说&#xff0c;网站设计不仅仅是美观的问题&#xff0c;更直接影响着搜索引擎中的排名。因此&#xff0c;精心策划和设计的网站&#xff0c;能够显著…

VisualStudio远程编译调试linux_c++程序(二)

前章讲述了gdb相关&#xff0c;这章主要讲述用VisualStudio调试编译linux_c程序 1&#xff1a;环境 win10 VisualStudio 2022 Community ubuntu22.04 2:安装 1>vs安装时&#xff0c;勾选 使用c进行linux 和嵌入式开发 (这里以vs2022为例) OR VS安装好了&#xff0c; 选择工…