代码随想录算法训练营第四十二四十三天

LeetCode/卡码网题目:

  • 42. 接雨水
  • 84. 柱状图中最大的矩形
  • 98. 所有可达路径

其他:

今日总结
往期打卡


42. 接雨水

跳转: 42. 接雨水

学习: 代码随想录公开讲解

问题:

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

思路:

单调栈的思路是只有遇到递增时才有可能能兜住雨水
单调栈中记录好右边界(填充边界之间的元素),如果当前柱子大于栈顶右边界,就要用栈中前一个边界或当前柱子中最小的那个填充洼地.
如果没有前一个边界,那么就说明前面都是已经填过的更小的值,兜不住雨水.

遍历时一共有三种情况:
栈为空或当前比栈顶小
当前和栈顶一样
当前大于栈顶
一样就要更新右边界,大于就开始出栈并填充

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

class Solution {public int trap(int[] height) {Deque<Integer> stack = new LinkedList<>();int ans = 0;for(int i=0;i<height.length;i++){if(!stack.isEmpty()){if(height[stack.peekLast()]==height[i]){stack.pollLast();}else if(height[stack.peekLast()]<height[i]){do{int mid = stack.pollLast();if(!stack.isEmpty()){int h = Math.min(height[stack.peekLast()],height[i])-height[mid];int w = i - stack.peekLast()-1;ans+=h*w;}}while(!stack.isEmpty()&&height[stack.peekLast()]<height[i]);}}stack.add(i);}return ans;}
}

84. 柱状图中最大的矩形

跳转: 84. 柱状图中最大的矩形

学习: 代码随想录公开讲解

问题:

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

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

在这里插入图片描述

思路:

如果递减,就开始计算前面一直到和自己等高那一块儿里的最大矩形.
再往后的计算不会和比当前元素高的部分合并,所以去掉的部分都会被看作当前元素.
为了让最小的元素能从0算到i-1,需要在最开始加一个高度为0的最小的柱子(哪怕被更新了0高度本来也是不需要计算的)
最后一个元素添加完后形成的递增栈也需要计算,可以从尾部再加一个为0的元素,将剩余可选矩阵全部计算求最大值

复杂度:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

代码:

class Solution {public int largestRectangleArea(int[] height) {Deque<Integer> stack = new LinkedList<>();int n = height.length+2;int[] heights = new int[n];System.arraycopy(height, 0, heights, 1, height.length);int ans = 0;stack.add(0);for(int i=1;i<n;i++){if(heights[i]>heights[stack.peekLast()]){stack.add(i);}else if(heights[i]==heights[stack.peekLast()]){stack.pollLast();stack.add(i);}else{while(!stack.isEmpty()&&heights[i]<=heights[stack.peekLast()]){int mid = stack.pollLast();if(!stack.isEmpty()){int w = i-stack.peekLast()-1;int h = heights[mid];ans = Math.max(ans,w*h);}}stack.add(i);}}return ans;}
}

98. 所有可达路径

跳转: 98. 所有可达路径

学习: 代码随想录公开讲解

问题:

给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。

思路:

从1开始,dfs深搜路径,回溯,结束条件是到达n,题目中说明了不会有平行边和自环,所以深度有限不用担心爆栈.
使用动态数组构造有向图的邻接矩阵,比使用基本数组要节省空间

复杂度:

  • 时间复杂度: O ( m ) O(m) O(m)
  • 空间复杂度: O ( m ) O(m) O(m)

代码:

import java.util.*;class Main {static List<Integer>[] lists;static ArrayList<Integer> path = new ArrayList<>();static boolean flag = true;static void dfs(int start) {if(start==lists.length-1){flag = false;System.out.print(1);for(int i=0;i<path.size();i++){System.out.print(" "+path.get(i));}System.out.println("");return;}for(int i:lists[start]){path.add(i);dfs(i);path.remove(path.size()-1);}}public static void main(String[] args) {Scanner in = new Scanner(System.in);int N = in.nextInt();int M = in.nextInt();lists = new List[N + 1];for (int i = 0; i <= N; i++) {lists[i] = new ArrayList<>();}for (int i = 0; i < M; i++) {int x = in.nextInt();int y = in.nextInt();lists[x].add(y);}dfs(1);if(flag) System.out.println(-1);}
}

总结

练习了单调栈和DFS

往期打卡

代码随想录算法训练营第四十一天

代码随想录算法训练营第四十天

代码随想录算法训练营第三十九天

代码随想录算法训练营第三十八天

代码随想录算法训练营第三十七天

代码随想录算法训练营第三十五&三十六天

代码随想录算法训练营第三十四天

代码随想录算法训练营第三十三天(补)

代码随想录算法训练营第三十二天

代码随想录算法训练营第三十一天

代码随想录算法训练营第三十天(补)

代码随想录算法训练营第二十九天

代码随想录算法训练营第二十八天

代码随想录算法训练营第二十七天(补)

代码随想录算法训练营第二十六天

代码随想录算法训练营第二十五天

代码随想录算法训练营第二十四天

代码随想录算法训练营第二十三天

代码随想录算法训练营周末四

代码随想录算法训练营第二十二天(补)

代码随想录算法训练营第二十一天

代码随想录算法训练营第二十天

代码随想录算法训练营第十九天

代码随想录算法训练营第十八天

代码随想录算法训练营第十七天

代码随想录算法训练营周末三

代码随想录算法训练营第十六天

代码随想录算法训练营第十五天

代码随想录算法训练营第十四天

代码随想录算法训练营第十三天

代码随想录算法训练营第十二天

代码随想录算法训练营第十一天

代码随想录算法训练营周末二

代码随想录算法训练营第十天

代码随想录算法训练营第九天

代码随想录算法训练营第八天

代码随想录算法训练营第七天

代码随想录算法训练营第六天

代码随想录算法训练营第五天

代码随想录算法训练营周末一

代码随想录算法训练营第四天

代码随想录算法训练营第三天

代码随想录算法训练营第二天

代码随想录算法训练营第一天

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

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

相关文章

SEO 优化实战:ZKmall模板商城的 B2C商城的 URL 重构与结构化数据

在搜索引擎算法日益复杂的今天&#xff0c;B2C商城想要在海量信息中脱颖而出&#xff0c;仅靠优质商品和营销活动远远不够。ZKmall模板商城以实战为导向&#xff0c;通过URL 重构与结构化数据优化两大核心策略&#xff0c;帮助 B2C 商城实现从底层架构到搜索展示的全面升级&…

Linux自有服务

自有服务概述 概述 自有服务&#xff0c;即不需要用户独立去安装的软件的服务&#xff0c;而是当系统安装好之后就可以直接使用的服务&#xff08;内置&#xff09; 显示服务 显示服务 命令&#xff1a;systemctl \[选项] 选项参数 list-units --type service --all&#x…

ZYNQ Overlay硬件库使用指南:用Python玩转FPGA加速

在传统的FPGA开发中,硬件设计需要掌握Verilog/VHDL等硬件描述语言,这对软件开发者而言门槛较高。Xilinx的PYNQ框架通过Overlay硬件库彻底改变了这一现状——开发者只需调用Python API即可控制FPGA的硬件模块,实现硬件加速与灵活配置。本文将深入探讨ZYNQ Overlay的核心概念、…

JavaScript入门【1】概述

1.JavaScript是什么? <font style"color:rgb(38,38,38);">Javascript &#xff08;简称“JS”&#xff09;是⼀种直译式脚本语⾔&#xff0c;⼀段脚本其实就是⼀系列指令&#xff0c;计算机通过这些指令来达成⽬标。它⼜是⼀种动态类型的编程语⾔。JS⽤来在⽹…

c++从入门到精通(五)--异常处理,命名空间,多继承与虚继承

异常处理 栈展开过程&#xff1a; 栈展开过程沿着嵌套函数的调用链不断查找&#xff0c;直到找到了与异常匹配的catch子句为止&#xff1b;也可能一直没找到匹配的catch&#xff0c;则退出主函数后查找过程终止。栈展开过程中的对象被自动销毁。 在栈展开的过程中&#xff0c…

自适应稀疏核卷积网络:一种高效灵活的图像处理方案

自适应稀疏核卷积网络&#xff1a;一种高效灵活的图像处理方案 引言 在深度学习的大潮中&#xff0c;计算机视觉技术取得了长足的进步。其中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;作为图像处理的核心工具&#xff0c;极大地推动了各类图像识别任务的效果提升。…

Nginx:利用 FreeSSL 申请(Https)免费证书的技术指南

1、简述 在现代互联网应用中,使用 HTTPS 连接是确保数据传输安全的基本需求。SSL/TLS 证书能够加密客户端与服务器之间的通信,防止中间人攻击等安全隐患。而许多开发者和小型企业可能会担心 SSL 证书的费用问题。幸运的是,FreeSSL 提供了一个简单易用的平台,允许我们申请免…

自定义库模块增加自定义许可操作详细方法

自定义库模块增加自定义许可操作详细方法 用到的工具: 后面程序用到的所有代码均是该工具生成的秘密&#xff01;&#xff01;&#xff01;&#xff01; 【切记切记&#xff01;&#xff01;&#xff01; 一定要记住密码&#xff0c;不然如果你想将库的许可认证移除&#xf…

python的漫画网站管理系统

目录 技术栈介绍具体实现截图![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0ed2084038144499a162b3fb731a5f37.png)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a76a091066f74a80bf7ac1be489ae8a8.png)系统设计研究方法&#xff1a;设计步骤设计流程核…

Python循环性脚本实践要点:打造稳定高效的定时任务

在Python开发中&#xff0c;循环性脚本&#xff08;长时间运行并定期执行任务的脚本&#xff09;非常常见&#xff0c;比如监控系统、数据采集程序、定时清理任务等。这类脚本虽然看似简单&#xff0c;但实际开发中容易遇到各种陷阱。本文将分享六大核心实践要点&#xff0c;帮…

编程基础:什么是变量

文章目录 变量&#xff1a;双要素变量必须代表一个意义&#xff1a;编程不需要无意义的变量。只要是变量&#xff0c;都需要有一个意义。变量必须要有不同的值&#xff1a;编程不需要只有一个值的变量。只要是变量&#xff0c;都需要有不同的值。 双要素少一个都不是变量即看见…

利用SenseGlove触觉手套开发XR手术训练体验

VirtualiSurg和VR触觉 作为领先的培训平台&#xff0c;VirtualiSurg自2017年以来一直利用扩展现实 (XR) 和触觉技术&#xff0c;为全球医疗保健行业提供个性化、数据驱动的学习解决方案。该平台赋能医疗专业人员进行协作式学习和培训&#xff0c;提升他们的技能&#xff0c;使…

【记录】Windows|竖屏怎么调整分辨率使横竖双屏互动鼠标丝滑

本文版本&#xff1a;Windows11&#xff0c;记录一下&#xff0c;我最后调整的比较舒适的分辨率是800*1280。 文章目录 第一步 回到桌面第二步 右键桌面第三步 设置横屏为主显示器第四步 调整分辨率使之符合你的需求第五步 勾选轻松在显示器之间移动光标第六步 拖动屏幕符合物理…

手机打电话时如何将通话对方的声音在手机上识别成文字

手机打电话时如何将通话对方的声音在手机上识别成文字 --本地AI电话机器人 上一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音应答&#xff08;一&#xff09; 下一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音应答&#xff08;二&#xff09; 一、…

uniapp-商城-61-后台 新增商品(添加商品到数据库)

完成商品的布局&#xff0c;完成商品的属性添加&#xff0c;最后的目的还是要完成数据添加&#xff0c;将我们前台的数据添加后台的数据库。 1、界面 2、点击提交完成商品添加 点击下方的提交按钮&#xff0c;将数据添加到数据库。 onSubmit 使用该函数---见3 <view cla…

A级、B级弱电机房数据中心建设运营汇报方案

该方案围绕A 级、B 级弱电机房数据中心建设与运营展开,依据《数据中心设计规范》等标准,施工范围涵盖 10 类机房及配套设施,采用专业化施工团队与物资调配体系,强调标签规范、线缆隐藏等细节管理。运营阶段建立三方协同运维模式,针对三级故障制定30 分钟至 1 小时响应机制…

RAG数据处理:PDF/HTML

RAG而言用户输入的数据通常是各种各样文档&#xff0c;本文主要采用langchain实现PDF/HTML文档的处理方法 PDF文档解析 PDF文档很常见格式&#xff0c;但内部结构常常较复杂&#xff1a; 复杂的版式布局多样的元素&#xff08;段落、表格、公式、图片等&#xff09;文本流无…

时源芯微| KY键盘接口静电浪涌防护方案

KY键盘接口静电浪涌防护方案通过集成ESD保护元件、电阻和连接键&#xff0c;形成了一道有效的防护屏障。当键盘接口受到静电放电或其他浪涌冲击时&#xff0c;该方案能够迅速将过电压和过电流引导至地&#xff0c;从而保护后续电路免受损害。 ESD保护元件是方案中的核心部分&a…

Java 原生网络编程(BIO | NIO | Reactor 模式)

1、基本常识 Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;是一组接口&#xff0c;使用了门面模式对应用层隐藏了传输层以下的实现细节。TCP 用主机的 IP 地址加上主机端口号作为 TCP 连接的端点&#xff0c;该端点叫做套接字 Socket。 比如三次握手&…

OpenCV透视变换

概念 OpenCV 透视变换是将图像从一个视平面投影到另一个视平面的过程&#xff0c;也叫投影映射 &#xff0c;属于空间立体三维变换。它基于透视原理&#xff0c;通过 33 的变换矩阵作用于图像像素坐标来实现映射转换 &#xff0c;能模拟人眼或相机镜头观看三维空间物体时的透视…