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

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;
}

题解:

要计算每个位置能接住多少雨水,关键在于看它左右两边最高的柱子。一个位置能接住的雨水量,等于它左右两边最高柱子高度的较小值减去它自身的高度。让栈像一个容器,我们把柱子的下标按柱子高度从高到低的顺序依次放进去。当遇到一个比栈顶柱子高的柱子时,就说明可以计算栈顶柱子和当前柱子之间能接住的雨水量了。

具体步骤
  1. 初始化

    • 创建一个栈,用来存储柱子的下标,初始时栈是空的。
    • 准备一个变量 ans,用来记录最终接住的雨水量,初始值为 0。
  2. 遍历柱子数组

    • 对于数组中的每个柱子:
      • 当栈不为空,并且当前柱子的高度大于栈顶柱子的高度时:
        • 把栈顶元素弹出,得到这个柱子的下标。
        • 如果弹出栈顶元素后栈为空了,说明没有左边界,没办法接住雨水,就停止计算这一轮。
        • 取出新的栈顶元素下标,作为左边界。
        • 计算当前柱子和左边界柱子之间的距离。
        • 计算能接住雨水的高度,也就是左右边界柱子高度的较小值减去弹出柱子的高度。
        • 用距离乘以高度,得到这部分的雨水量,累加到 ans 中。
      • 把当前柱子的下标放入栈中。
  3. 返回结果:遍历完所有柱子后,ans 就是最终能接住的雨水量。

复杂度分析
  • 时间复杂度:每个柱子最多入栈和出栈一次,所以时间复杂度是 ,这里的  是柱子数组的长度。
  • 空间复杂度:主要是栈的空间开销,最坏情况下栈需要存储所有柱子的下标,所以空间复杂度是 

 

题目二: 滑动窗口最大值

  1. 题目描述:给定一个数组 nums 和一个整数 k,请找出所有长度为 k 的滑动窗口中的最大值。

  2. 示例:输入 nums = [1,3,-1,-3,5,3,6,7]k = 3,输出 [3,3,5,5,6,7]

  3. 思路:可以使用单调队列来解决。单调队列是一种特殊的数据结构,它可以在  的时间内获取队列中的最大值或最小值。在遍历数组时,维护一个单调递减的队列,队列中存储数组的下标。当窗口移动时,判断队首元素是否在当前窗口内,如果不在则弹出队首元素,每次将当前窗口的最大值加入结果列表。

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;
}

题解:

我们可以使用单调队列来解决这个问题。单调队列是一种特殊的队列,队列里的元素要么单调递增,要么单调递减。在本题中,我们用单调递减队列来维护窗口内的最大值。队列里存储的是元素的下标,队首元素对应的就是当前窗口中的最大值。

具体步骤

  1. 特殊情况处理

    • 如果数组为空或者窗口大小为 0,直接返回空结果。

  2. 初始化

    • 计算结果数组的长度,它等于数组长度减去窗口大小再加 1。

    • 动态分配结果数组的内存。

    • 创建一个队列,用来存储元素的下标,同时设置队首和队尾指针。

  3. 遍历数组

    • 对于数组中的每个元素:

      • 先检查队首元素是否还在当前窗口内,如果不在,就把队首元素移除。

      • 然后维护队列的单调性,把队列中比当前元素小的元素都移除。

      • 把当前元素的下标放入队列。

      • 当窗口大小达到 k 时,队首元素对应的就是当前窗口的最大值,把这个值记录到结果数组中。

  4. 返回结果:遍历完数组后,结果数组里就存储了所有滑动窗口的最大值。

复杂度分析

  • 时间复杂度:每个元素最多入队和出队一次,所以时间复杂度是 ,其中  是数组的长度。

  • 空间复杂度:队列中最多存储  个元素,所以空间复杂度是 。

 

 

相关文章:

2.14日学习总结

题目一&#xff1a;接雨水问题 1.题目描述&#xff1a;给定一个数组 height 表示一个地形的高度图&#xff0c;数组中的每个元素代表每个宽度为 1 的柱子的高度。计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 2.示例&#xff1a;输入 height [0,1,0,2,1,0,1,3,2,1…...

【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析

引言 在大数据与云原生技术快速发展的时代&#xff0c;开源技术成为推动行业进步的重要力量。本文将深入探讨三个备受瞩目的开源产品组件&#xff1a;DeepSeek、DataSophon 和 DolphinScheduler&#xff0c;分别从产品定义、功能、技术架构、应用场景、优劣势及社区活跃度等方面…...

Go 语言里中的堆与栈

在 Go 语言里&#xff0c;堆和栈是内存管理的两个重要概念&#xff0c;它们在多个方面存在明显差异&#xff1a; 1. 内存分配与回收方式 栈 分配&#xff1a;Go 语言中&#xff0c;栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时&#xff0c;Go 会自动为其…...

云计算实训室解决方案(2025年最新版)

一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展&#xff0c;相关领域人才需求激增&#xff0c;许多本科及职业院校纷纷开设云计算及相关专业方向。 然而&#xff0c;大多数院校在专业建设过程中面临以下困难&…...

我的新书《青少年Python趣学编程(微课视频版)》出版了!

&#x1f389; 激动人心的时刻来临啦&#xff01; &#x1f389; 小伙伴们久等了&#xff0c;我的第一本新书 《青少年Python趣学编程&#xff08;微课视频版&#xff09;》 正式出版啦&#xff01; &#x1f4da;✨ 在这个AI时代&#xff0c;市面上的Python书籍常常过于枯燥&…...

网络安全要学python 、爬虫吗

网络安全其实并不复杂&#xff0c;只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分&#xff1a;web安全和二进制逆向安全。web安全是网络安全的入门方向&#xff0c;内容简单&#xff0c;就…...

DBSCAN 基于密度的空间带噪聚类法

DBSCAN 基于密度的空间带噪聚类法 DBSCAN&#xff08;Density - Based Spatial Clustering of Applications with Noise&#xff09;即基于密度的空间聚类算法&#xff0c;它是一种典型的密度聚类算法&#xff0c;以下从核心概念、算法步骤、优缺点及应用场景等方面进行解释。…...

Spring Security,servlet filter,和白名单之间的关系

首先&#xff0c;Servlet Filter是Java Web应用中的基础组件&#xff0c;用于拦截请求和响应&#xff0c;进行预处理和后处理。它们在处理HTTP请求时处于最外层&#xff0c;可以执行日志记录、身份验证、授权等操作。白名单机制通常指允许特定IP、用户或请求通过的安全策略&…...

深入理解Java反射机制 —— 构建灵活、动态的后端应用

一、引言 在Java后端开发中&#xff0c;反射机制是一项极具威力的技术。它允许程序在运行时动态加载类、调用方法以及访问属性&#xff0c;从而使得代码具有更高的灵活性和扩展性。本文将从反射的基本原理、核心API、实际应用场景到使用时的注意事项&#xff0c;详细探讨如何在…...

Python基于Django的漏洞扫描系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

或非门组成的SR锁存器真值表相关问题

PS&#xff1a;主要是给大家抛砖引玉&#xff0c;不喜勿喷。 问题描述&#xff1a;或非门组成的SR锁存器&#xff0c;为什么当SD和RD等于0时候的真值表一个是Q0&#xff0c;Q0.一个结果是Q1&#xff0c;Q1&#xff1f;...

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

在深度学习框架中&#xff0c;TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow&#xff08;点击查看&#xff09; 和 PyTorch&#xff08;点击查看&#xff09;。它们引领着 AI 开发的潮流&#xff0c;吸引着无数开发者投身其中。但这两大框…...

如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析

CVE-2024-1430 是一个影响 Netgear R7000 路由器的安全漏洞&#xff0c;漏洞来源于该路由器 Web 管理界面的信息泄露问题。攻击者通过访问 /currentsetting.htm 文件&#xff0c;可能泄露敏感信息&#xff0c;如 Wi-Fi 密码等。 在测试和验证 CVE-2024-1430 时&#xff0c;您需…...

MongoDB 基本操作

一、数据库操作 1. 切换或创建数据库 使用use命令切换到指定数据库&#xff0c;若该数据库不存在&#xff0c;在首次插入数据时会自动创建。 use myDatabase 2. 查看所有数据库 使用show dbs命令查看 MongoDB 实例中的所有数据库。 show dbs 3. 删除当前数据库 使用db.…...

【前端框架】Vue3 面试题深度解析

本文详细讲解了VUE3相关的面试题&#xff0c;从基础到进阶到高级&#xff0c;分别都有涉及&#xff0c;希望对你有所帮助&#xff01; 基础题目 1. 简述 Vue3 与 Vue2 相比有哪些主要变化&#xff1f; 答案&#xff1a; 响应式系统&#xff1a;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.论文原名&#xff1a;Inference of gene regulatory networks based on directed graph convolutional networks 2.发表日期&#xff1a;2024 DGCGRN框架 中心节点和节点的构建 局部增强策略 1. 问题背景 在基因调控网络中&#xff0c;许多节点的连接度较低&#xff08;即…...

DeepSeek崛起:中国AI产业的颠覆者与重构者

当DeepSeek以"中国版ChatGPT"的标签横空出世时&#xff0c;这个诞生于杭州的AI新贵仅用三个月时间就完成了从行业黑马到颠覆者的蜕变。其开源大模型DeepSeek-R1在HuggingFace开源大模型排行榜的登顶&#xff0c;不仅意味着技术指标的超越&#xff0c;更预示着中国AI产…...

E. Exposition

题目链接&#xff1a;Problem - E - Codeforces 题目大意&#xff1a; 给你一个长度为n的序列&#xff0c;和一个整数k.现让找出所有连续的最长子区间&#xff0c; 其子区间的条件是&#xff1a;在区间里最大值减去最小值之差要小于 k . 输入&#xff1a; 输入数据的第一行包…...

KVM虚拟化快速入门,最佳的开源可商用虚拟化平台

引言 在信息技术飞速发展的时代&#xff0c;服务器资源的高效利用成为企业关注的焦点。KVM 虚拟化作为一种先进的虚拟化技术&#xff0c;在众多虚拟化方案中脱颖而出&#xff0c;为企业实现服务器资源的优化配置提供了有效途径。 以往&#xff0c;物理服务器的资源利用效率较…...

unity删除了安卓打包平台,unityhub 还显示已经安装,怎么解决

解决问题地址 可能由于版本问题文章中这个我没搜到&#xff0c;应该搜Android Build Supprot...

软件工程-软件设计

包括 从管理的观点看包括&#xff1a; 详细设计 概要设计 从技术的观点看包括&#xff1a; 数据设计&#xff08;详细设计&#xff09; 系统结构设计&#xff08;概要设计&#xff09; 过程设计&#xff08;详细设计&#xff09; 任务 分析模型——》设计模型——》设…...

【Viper】配置格式与支持的数据源与go案例

Viper 是一个用于 Go 应用程序的配置管理库&#xff0c;支持多种配置格式和数据源。 安装依赖 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】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

数据结构 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. 二叉树的遍历&#xff08;画图&#xff09;7.2.5. 二叉…...

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…...

01什么是DevOps

在日常开发中&#xff0c;运维人员主要负责跟生产环境打交道&#xff0c;开发和测试&#xff0c;不去操作生产环境的内容&#xff0c;生产环境由运维人员操作&#xff0c;这里面包含了环境的搭建、系统监控、故障的转移&#xff0c;还有软件的维护等内容。 当一个项目开发完毕&…...

力扣100. 相同的树(利用分解思想解决)

Problem: 100. 相同的树 文章目录 题目描述思路Code 题目描述 思路 题目要求判断两个二叉树是否完全相同&#xff0c;而此要求可以利用问题分解的思想解决&#xff0c;即判断当前节点的左右子树是否完全相同&#xff0c;而在二叉树问题分解的一般题目中均会带有返回值&#xff…...

【深度学习模型分类】

深度学习模型种类繁多&#xff0c;涵盖了从基础到前沿的多种架构。以下是主要模型的分类及代表性方法&#xff1a; 1. 基础模型 1.1 多层感知机&#xff08;MLP&#xff09; 特点&#xff1a;全连接神经网络&#xff0c;适用于结构化数据。 应用&#xff1a;分类、回归任务…...

el-select 设置宽度 没效果

想实现下面的效果&#xff0c;一行两个&#xff0c;充满el-col12 然后设置了 width100%,当时一直没有效果 解决原因&#xff1a; el-form 添加了 inline 所以删除inline属性 即可...