2.14日学习总结
题目一:接雨水问题
1.题目描述:给定一个数组 height 表示一个地形的高度图,数组中的每个元素代表每个宽度为 1 的柱子的高度。计算按此排列的柱子,下雨之后能接多少雨水。
2.示例:输入 height = [0,1,0,2,1,0,1,3,2,1,2,1],输出 6。
3.思路:可以使用栈来解决。遍历数组,当栈为空或者当前高度小于等于栈顶元素高度时,将当前元素的索引入栈。当当前高度大于栈顶元素高度时,说明可以接雨水,不断弹出栈顶元素并计算接水量,直到栈为空或者当前高度小于等于栈顶元素高度。
AC代码:
#include <stdio.h>// 计算接雨水量的函数
int t(int* h, int s) {int st[s];int t = -1;int a = 0;for (int i = 0; i < s; i++) {while (t != -1 && h[i] > h[st[t]]) {int ti = st[t--];if (t == -1) {break;}int l = st[t];int d = i - l - 1;int bh = (h[l] < h[i] ? h[l] : h[i]) - h[ti];a += d * bh;}st[++t] = i;}return a;
}int main() {int h[] = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};int s = sizeof(h) / sizeof(h[0]);int r = t(h, s);printf("接雨水的量为: %d\n", r);return 0;
}
题解:
要计算每个位置能接住多少雨水,关键在于看它左右两边最高的柱子。一个位置能接住的雨水量,等于它左右两边最高柱子高度的较小值减去它自身的高度。让栈像一个容器,我们把柱子的下标按柱子高度从高到低的顺序依次放进去。当遇到一个比栈顶柱子高的柱子时,就说明可以计算栈顶柱子和当前柱子之间能接住的雨水量了。
具体步骤
-
初始化:
- 创建一个栈,用来存储柱子的下标,初始时栈是空的。
- 准备一个变量
ans,用来记录最终接住的雨水量,初始值为 0。
-
遍历柱子数组:
- 对于数组中的每个柱子:
- 当栈不为空,并且当前柱子的高度大于栈顶柱子的高度时:
- 把栈顶元素弹出,得到这个柱子的下标。
- 如果弹出栈顶元素后栈为空了,说明没有左边界,没办法接住雨水,就停止计算这一轮。
- 取出新的栈顶元素下标,作为左边界。
- 计算当前柱子和左边界柱子之间的距离。
- 计算能接住雨水的高度,也就是左右边界柱子高度的较小值减去弹出柱子的高度。
- 用距离乘以高度,得到这部分的雨水量,累加到
ans中。
- 把当前柱子的下标放入栈中。
- 当栈不为空,并且当前柱子的高度大于栈顶柱子的高度时:
- 对于数组中的每个柱子:
-
返回结果:遍历完所有柱子后,
ans就是最终能接住的雨水量。
复杂度分析
- 时间复杂度:每个柱子最多入栈和出栈一次,所以时间复杂度是 ,这里的 是柱子数组的长度。
- 空间复杂度:主要是栈的空间开销,最坏情况下栈需要存储所有柱子的下标,所以空间复杂度是
题目二: 滑动窗口最大值
-
题目描述:给定一个数组
nums和一个整数k,请找出所有长度为k的滑动窗口中的最大值。 -
示例:输入
nums = [1,3,-1,-3,5,3,6,7],k = 3,输出[3,3,5,5,6,7]。 -
思路:可以使用单调队列来解决。单调队列是一种特殊的数据结构,它可以在 的时间内获取队列中的最大值或最小值。在遍历数组时,维护一个单调递减的队列,队列中存储数组的下标。当窗口移动时,判断队首元素是否在当前窗口内,如果不在则弹出队首元素,每次将当前窗口的最大值加入结果列表。
AC代码:
#include <stdio.h>
#include <stdlib.h>// 计算滑动窗口最大值的函数
int* m(int* n, int ns, int k, int* rs) {if (ns == 0 || k == 0) {*rs = 0;return NULL;}*rs = ns - k + 1;int* r = (int*)malloc(sizeof(int) * (*rs));int q[ns];int f = 0, e = -1;for (int i = 0; i < ns; i++) {if (f <= e && q[f] <= i - k) {f++;}while (f <= e && n[q[e]] <= n[i]) {e--;}q[++e] = i;if (i >= k - 1) {r[i - k + 1] = n[q[f]];}}return r;
}int main() {int n[] = {1, 3, -1, -3, 5, 3, 6, 7};int ns = sizeof(n) / sizeof(n[0]);int k = 3;int rs;int* r = m(n, ns, k, &rs);printf("滑动窗口最大值为: ");for (int i = 0; i < rs; i++) {printf("%d ", r[i]);}printf("\n");free(r);return 0;
}
题解:
我们可以使用单调队列来解决这个问题。单调队列是一种特殊的队列,队列里的元素要么单调递增,要么单调递减。在本题中,我们用单调递减队列来维护窗口内的最大值。队列里存储的是元素的下标,队首元素对应的就是当前窗口中的最大值。
具体步骤
-
特殊情况处理:
-
如果数组为空或者窗口大小为 0,直接返回空结果。
-
-
初始化:
-
计算结果数组的长度,它等于数组长度减去窗口大小再加 1。
-
动态分配结果数组的内存。
-
创建一个队列,用来存储元素的下标,同时设置队首和队尾指针。
-
-
遍历数组:
-
对于数组中的每个元素:
-
先检查队首元素是否还在当前窗口内,如果不在,就把队首元素移除。
-
然后维护队列的单调性,把队列中比当前元素小的元素都移除。
-
把当前元素的下标放入队列。
-
当窗口大小达到
k时,队首元素对应的就是当前窗口的最大值,把这个值记录到结果数组中。
-
-
-
返回结果:遍历完数组后,结果数组里就存储了所有滑动窗口的最大值。
复杂度分析
-
时间复杂度:每个元素最多入队和出队一次,所以时间复杂度是 ,其中 是数组的长度。
-
空间复杂度:队列中最多存储 个元素,所以空间复杂度是 。
相关文章:
2.14日学习总结
题目一:接雨水问题 1.题目描述:给定一个数组 height 表示一个地形的高度图,数组中的每个元素代表每个宽度为 1 的柱子的高度。计算按此排列的柱子,下雨之后能接多少雨水。 2.示例:输入 height [0,1,0,2,1,0,1,3,2,1…...
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
引言 在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler,分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…...
Go 语言里中的堆与栈
在 Go 语言里,堆和栈是内存管理的两个重要概念,它们在多个方面存在明显差异: 1. 内存分配与回收方式 栈 分配:Go 语言中,栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时,Go 会自动为其…...
云计算实训室解决方案(2025年最新版)
一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展,相关领域人才需求激增,许多本科及职业院校纷纷开设云计算及相关专业方向。 然而,大多数院校在专业建设过程中面临以下困难&…...
我的新书《青少年Python趣学编程(微课视频版)》出版了!
🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…...
网络安全要学python 、爬虫吗
网络安全其实并不复杂,只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分:web安全和二进制逆向安全。web安全是网络安全的入门方向,内容简单,就…...
DBSCAN 基于密度的空间带噪聚类法
DBSCAN 基于密度的空间带噪聚类法 DBSCAN(Density - Based Spatial Clustering of Applications with Noise)即基于密度的空间聚类算法,它是一种典型的密度聚类算法,以下从核心概念、算法步骤、优缺点及应用场景等方面进行解释。…...
Spring Security,servlet filter,和白名单之间的关系
首先,Servlet Filter是Java Web应用中的基础组件,用于拦截请求和响应,进行预处理和后处理。它们在处理HTTP请求时处于最外层,可以执行日志记录、身份验证、授权等操作。白名单机制通常指允许特定IP、用户或请求通过的安全策略&…...
深入理解Java反射机制 —— 构建灵活、动态的后端应用
一、引言 在Java后端开发中,反射机制是一项极具威力的技术。它允许程序在运行时动态加载类、调用方法以及访问属性,从而使得代码具有更高的灵活性和扩展性。本文将从反射的基本原理、核心API、实际应用场景到使用时的注意事项,详细探讨如何在…...
Python基于Django的漏洞扫描系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
或非门组成的SR锁存器真值表相关问题
PS:主要是给大家抛砖引玉,不喜勿喷。 问题描述:或非门组成的SR锁存器,为什么当SD和RD等于0时候的真值表一个是Q0,Q0.一个结果是Q1,Q1?...
深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决
在深度学习框架中,TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow(点击查看) 和 PyTorch(点击查看)。它们引领着 AI 开发的潮流,吸引着无数开发者投身其中。但这两大框…...
如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析
CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞,漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件,可能泄露敏感信息,如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时,您需…...
MongoDB 基本操作
一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库,若该数据库不存在,在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…...
【前端框架】Vue3 面试题深度解析
本文详细讲解了VUE3相关的面试题,从基础到进阶到高级,分别都有涉及,希望对你有所帮助! 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化? 答案: 响应式系统:Vue2 使用 Object.definePrope…...
springboot中使用log4j2
安装依赖pom.xml <!--排除logback的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</…...
GRN前沿:DGCGRN:基于有向图卷积网络的基因调控网络推理
1.论文原名:Inference of gene regulatory networks based on directed graph convolutional networks 2.发表日期:2024 DGCGRN框架 中心节点和节点的构建 局部增强策略 1. 问题背景 在基因调控网络中,许多节点的连接度较低(即…...
DeepSeek崛起:中国AI产业的颠覆者与重构者
当DeepSeek以"中国版ChatGPT"的标签横空出世时,这个诞生于杭州的AI新贵仅用三个月时间就完成了从行业黑马到颠覆者的蜕变。其开源大模型DeepSeek-R1在HuggingFace开源大模型排行榜的登顶,不仅意味着技术指标的超越,更预示着中国AI产…...
E. Exposition
题目链接:Problem - E - Codeforces 题目大意: 给你一个长度为n的序列,和一个整数k.现让找出所有连续的最长子区间, 其子区间的条件是:在区间里最大值减去最小值之差要小于 k . 输入: 输入数据的第一行包…...
KVM虚拟化快速入门,最佳的开源可商用虚拟化平台
引言 在信息技术飞速发展的时代,服务器资源的高效利用成为企业关注的焦点。KVM 虚拟化作为一种先进的虚拟化技术,在众多虚拟化方案中脱颖而出,为企业实现服务器资源的优化配置提供了有效途径。 以往,物理服务器的资源利用效率较…...
unity删除了安卓打包平台,unityhub 还显示已经安装,怎么解决
解决问题地址 可能由于版本问题文章中这个我没搜到,应该搜Android Build Supprot...
软件工程-软件设计
包括 从管理的观点看包括: 详细设计 概要设计 从技术的观点看包括: 数据设计(详细设计) 系统结构设计(概要设计) 过程设计(详细设计) 任务 分析模型——》设计模型——》设…...
【Viper】配置格式与支持的数据源与go案例
Viper 是一个用于 Go 应用程序的配置管理库,支持多种配置格式和数据源。 安装依赖 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要写在etcd客户端import里 1…...
C++ Primer 参数传递
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
数据结构 day06
数据结构 day06 6. 双向链表6.3. 双向循环链表 7. 树 tree7.1. 特点7.1.1. 什么是树7.1.2. 树的特性7.1.3. 关于树的一些术语 7.2. 二叉树7.2.1. 什么是二叉树7.2.2. 二叉树的性质7.2.3. 满二叉树和完全二叉树的区别7.2.4. 二叉树的遍历(画图)7.2.5. 二叉…...
AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI
前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…...
01什么是DevOps
在日常开发中,运维人员主要负责跟生产环境打交道,开发和测试,不去操作生产环境的内容,生产环境由运维人员操作,这里面包含了环境的搭建、系统监控、故障的转移,还有软件的维护等内容。 当一个项目开发完毕&…...
力扣100. 相同的树(利用分解思想解决)
Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同,而此要求可以利用问题分解的思想解决,即判断当前节点的左右子树是否完全相同,而在二叉树问题分解的一般题目中均会带有返回值ÿ…...
【深度学习模型分类】
深度学习模型种类繁多,涵盖了从基础到前沿的多种架构。以下是主要模型的分类及代表性方法: 1. 基础模型 1.1 多层感知机(MLP) 特点:全连接神经网络,适用于结构化数据。 应用:分类、回归任务…...
el-select 设置宽度 没效果
想实现下面的效果,一行两个,充满el-col12 然后设置了 width100%,当时一直没有效果 解决原因: el-form 添加了 inline 所以删除inline属性 即可...
