目标​:刷完灵神专题训练算法题单

阶段目标📌:【算法题单】滑动窗口与双指针

LeetCode题目:

  • 1456. 定长子串中元音的最大数目
  • 643. 子数组最大平均数 I
  • 1343. 大小为 K 且平均值大于等于阈值的子数组数目
  • 2090. 半径为 k 的子数组平均值
  • 2379. 得到 K 个黑块的最少涂色次数
  • 2841. 几乎唯一子数组的最大和

其他:

今日总结


1456. 定长子串中元音的最大数目

跳转: 1456. 定长子串中元音的最大数目

学习: 灵神:教你解决定长滑窗!

问题:

给你字符串 s 和整数 k

请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(a, e, i, o, u)。

思路:

定长滑动窗口,先装入元素,根据题目要求更新,窗口满员则下次装入前先退出末尾元素。

复杂度:

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

代码:

class Solution:def maxVowels(self, s: str, k: int) -> int:ans = vowel = 0for i,c in enumerate(s):if c in "aeiou":vowel += 1if i < k - 1:continueans = max(ans,vowel)if s[i - k + 1] in "aeiou":vowel -= 1return ans

643. 子数组最大平均数 I

跳转: 643. 子数组最大平均数 I

问题:

给你一个由 n 个元素组成的整数数组 nums 和一个整数 k

请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。

任何误差小于 10-5 的答案都将被视为正确答案。

思路:

滑动窗口求最大值,题目条件保证 k<=nk <= nk<=n 。可以先初始化为前k个元素作为初始窗口,然后边移动边比较
本质上还是入-更新-出,相当于初始化并更新,然后倒出-装入-更新。倒出-装入一步完成

复杂度:

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

代码:

class Solution:def findMaxAverage(self, nums: List[int], k: int) -> float:maxArgv = temp = sum(nums[:k])for idx in range(0,len(nums)-k):temp += nums[idx+k] - nums[idx]maxArgv = max(maxArgv,temp)return maxArgv / k

1343. 大小为 K 且平均值大于等于阈值的子数组数目

跳转: 1343. 大小为 K 且平均值大于等于阈值的子数组数目

问题:

给你一个整数数组 arr 和两个整数 kthreshold

请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。

思路:

这里要求计数,首先threshold与k是整数,商和除数为整数的情况下求被除数不用考虑精度,所以可以直接用threshold * k卡计数条件,初始化-更新,出入-更新滑动窗口即可。

复杂度:

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

代码:

class Solution:def numOfSubarrays(self, arr: List[int], k: int, threshold: int) -> int:ans = 0Bound = threshold * ktemp = sum(arr[:k])if temp >= Bound:ans += 1for idx in range(0,len(arr)-k):temp += arr[idx + k] - arr[idx]if temp >= Bound:ans += 1return ans

2090. 半径为 k 的子数组平均值

跳转:2090. 半径为 k 的子数组平均值

问题:

给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k

半径为 k 的子数组平均值 是指:nums 中一个以下标 i中心半径k 的子数组中所有元素的平均值,即下标在 i - ki + k 范围( i - ki + k)内所有元素的平均值。如果在下标 i 前或后不足 k 个元素,那么 半径为 k 的子数组平均值-1

构建并返回一个长度为 n 的数组 avgs ,其中 avgs[i] 是以下标 i 为中心的子数组的 半径为 k 的子数组平均值

x 个元素的 平均值x 个元素相加之和除以 x ,此时使用截断式 整数除法 ,即需要去掉结果的小数部分。

  • 例如,四个元素 2315 的平均值是 (2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75,截断后得到 2

思路:

可以看作是窗口大小为 2 * k + 1 的滑动窗口,但更新是在中点处更新,这里采用覆盖的方式更新值
本质上还是入-更新-出,相当于初始化并更新,然后倒出-装入-更新。倒出-装入一步完成

复杂度:

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

代码:

class Solution:def getAverages(self, nums: List[int], k: int) -> List[int]:size = k * 2 + 1avgs = [-1 for _ in range(len(nums))]if len(nums) < size:return avgstemp = sum(nums[:size])avgs[k] = temp // sizefor idx in range(0,len(nums) - size):temp += nums[idx + size] - nums[idx]avgs[idx + k + 1] = temp // sizereturn avgs

2379. 得到 K 个黑块的最少涂色次数

跳转: 2379. 得到 K 个黑块的最少涂色次数

问题:

给你一个长度为 n 下标从 0 开始的字符串 blocksblocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W''B' 分别表示白色和黑色。

给你一个整数 k ,表示想要 连续 黑色块的数目。

每一次操作中,你可以选择一个白色块将它 涂成 黑色块。

请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。

思路:

相当于在大小为k的窗口中求白色快最少数量
每一个都需要判断,不是简单加和,所以不能偷懒,入-更新-出

复杂度:

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

代码:

class Solution:def minimumRecolors(self, blocks: str, k: int) -> int:ans = ktemp = 0for idx,value in enumerate(blocks):if value == 'W':temp += 1if idx < k - 1:continueans = min(temp,ans)if blocks[idx - k + 1] == 'W':temp -= 1return ans

2841. 几乎唯一子数组的最大和

跳转: 2841. 几乎唯一子数组的最大和

问题:

给你一个整数数组 nums 和两个正整数 mk

请你返回 nums 中长度为 k几乎唯一 子数组的 最大和 ,如果不存在几乎唯一子数组,请你返回 0

如果 nums 的一个子数组有至少 m 个互不相同的元素,我们称它是 几乎唯一 子数组。

子数组指的是一个数组中一段连续 非空 的元素序列。

思路:

入-更新-出,但只在满足不重复元素大于等于m的情况下更新
这里维护字典键值对数来判断不重复元素有多少

复杂度:

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

代码:

class Solution:def maxSum(self, nums: List[int], m: int, k: int) -> int:ans = cnt = 0dict_num = {}for idx,num in enumerate(nums):cnt += numif num in dict_num:dict_num[num] += 1else:dict_num[num] = 1if idx < k - 1:continueif len(dict_num) >= m:ans = max(ans,cnt)temp = nums[idx - k + 1]cnt -= tempif dict_num[temp] == 1:del dict_num[temp]else:dict_num[temp] -= 1return ans

总结

练习了定长滑动窗口基础题目,思路模板为入-更新-出,不一定是简单的增删改元素,要考虑有条件的增删改

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

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

相关文章

【软考高项】信息系统项目管理师-第1章 信息化发展(1.5 数字化转型与元宇宙、1.6 标题类知识点、1.7 十四五规划内容汇总)

文章大纲 第1章 信息化发展1.5 数字化转型与元宇宙1.5.1 数字化转型1.5.2 元宇宙1.6 标题类知识点1.7 十四五规划内容汇总1.8 10道试题第1章 信息化发展 学习建议: 此章内容大部分为新增内容,基本是全新的章节2023年5月考试2分选择,5分案例2023年下半年各批次选择题2分左右1.…

STM32F103C8T6单片机内部执行原理及启动流程详解

引言&#xff1a;为什么深入理解STM32启动流程很重要&#xff1f;STM32F103C8T6作为嵌入式开发中最常用的单片机之一&#xff0c;其内部执行原理和启动流程是理解嵌入式系统底层运行机制的核心。无论是开发Bootloader、调试HardFault异常&#xff0c;还是优化系统启动速度&…

【python 常用的数学科学/计算机视觉等工具】

当然有&#xff01;在科学计算、机器学习、图像处理等领域&#xff0c;scikit-learn、scikit-image&#xff08;skimage&#xff09;、SciPy、OpenCV 是非常重要的库&#xff0c;但它们不是唯一的。以下是一些与它们类似或互补的项目&#xff0c;按照用途分类列出&#xff1a; …

LUMP+NFS架构的Discuz论坛部署

一、配置准备 每台主机都安装mysql、nfs、php、mysql 对每台主机都进行关闭防火墙、上下文等&#xff0c;减少阻碍[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安装插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基础概念deque和vector一样都是对元素的操作&#xff0c;不同点&#xff1a;vector对元素增删后元素会往前或往后移&#xff0c;如果数据不大没有太多影响&#xff0c;如果数据很大效率会变低&#xff1b;deque对元素增删不会使元素位置改变&#xff0c;所有效率会变高。二.…

字节跳动高质量声音克龙文字转语音合成软件MegaTTS3整合包

MegaTTS3是抖音团队联合国内其他大学研发的一款语音合成及声音克龙应用&#xff0c;可实现零样本语音克龙及富有情感的自然语音合成。我基于当前最新版制作了免安装一键启动整合包。 MegaTTS3介绍 MegaTTS 3 是字节跳动&#xff08;ByteDance&#xff09;与浙江大学联合开发的…

RPC:远程过程调用机制

目录 1、概念 2、RPC架构 2.1 RPC的四个核心组件 2.2 访问流程 3、关键概念 3.1 接口定义语言 (IDL - Interface Definition Language) 3.2 序列化与反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 网络传输 (Transport) 3.4 服务发…

EPLAN 电气制图(六):电机正反转副勾主电路绘制

一、项目背景&#xff1a;为什么绘制电机正反转主电路&#xff1f; 在多功能天车系统中&#xff0c;电机正反转控制是核心功能之一。通过 EPLAN 绘制主电路&#xff0c;不仅能清晰展示电源分配、换相逻辑和线缆连接&#xff0c;还能为后续 PLC 控制设计奠定基础。本次以西门子设…

JAVA JVM对象的实现

jvm分配内存给对象的方式1. 内存分配的总体流程对象内存分配的主要步骤&#xff1a;类加载检查&#xff1a;确认类已加载、解析和初始化。内存分配&#xff1a;根据对象大小&#xff0c;从堆中划分内存空间。内存初始化&#xff1a;将分配的内存空间初始化为零值&#xff08;不…

CVE-2023-41990/CVE-2023-32434/CVE-2023-38606/CVE-2023-32435

CVE-2023-41990&#xff08;GitLab 命令注入漏洞&#xff09;漏洞原理CVE-2023-41990是GitLab CE/EE&#xff08;社区版/企业版&#xff09;中项目导出功能的一个命令注入漏洞。具体原理如下&#xff1a;①GitLab在导出项目时&#xff0c;会调用git命令生成项目存档&#xff08…

RAG实战指南 Day 8:PDF、Word和HTML文档解析实战

【RAG实战指南 Day 8】PDF、Word和HTML文档解析实战 开篇 欢迎来到"RAG实战指南"系列的第8天&#xff01;今天我们将深入探讨PDF、Word和HTML文档解析技术&#xff0c;这是构建企业级RAG系统的关键基础。在实际业务场景中&#xff0c;80%以上的知识都以这些文档格式…

【AXI】读重排序深度

我们以DDR4存储控制器为例&#xff0c;设计一个读重排序深度为3的具体场景&#xff0c;展示从设备如何利用3级队列优化访问效率&#xff1a;基础设定从设备类型&#xff1a;DDR4存储控制器&#xff08;支持4个存储体Bank0-Bank3&#xff09;读重排序深度&#xff1a;3&#xff…

牛马逃离北京(回归草原计划)

丰宁坝上草原自驾游攻略&#xff08;半虎线深度版&#xff09; &#x1f697; 路线&#xff1a;北京/承德 → 丰宁县城 → 半虎线 → 大滩镇&#xff08;2天1夜&#xff09; &#x1f3af; 核心玩法&#xff1a;免费草原、高山牧场、日落晚霞、牧群互动、星空烟花&#x1f33f;…

【前端】【Echarts】ECharts 词云图(WordCloud)教学详解

效果ECharts 词云图&#xff08;WordCloud&#xff09;教学详解 词云图是一种通过关键词的大小、颜色等视觉差异来展示文本数据中词频或权重的图表。它直观、形象&#xff0c;是数据分析和内容展示中的利器。 本文将带你从零开始&#xff0c;学习如何用 ECharts 的 WordCloud 插…

【arXiv 2025】新颖方法:基于快速傅里叶变换的高效自注意力,即插即用!

一、整体介绍 The FFT Strikes Again: An Efficient Alternative to Self-AttentionFFT再次出击&#xff1a;一种高效的自注意力替代方案图1&#xff1a;FFTNet整体流程&#xff0c;包括局部窗口处理&#xff08;STFT或小波变换&#xff0c;可选&#xff09;和全局FFT&#xff…

通过vue如何利用 Three 绘制 简单3D模型(源码案例)

目录 Three 介绍 创建基础3D场景 创建不同类型的3D模型 1. 球体 2. 圆柱体​​​​​​​ 3. 平面​​​​​​​ 加载外部3D模型 添加交互控制 创建可交互的3D场景 Three 介绍 Three.js是一个强大的JavaScript 3D库&#xff0c;可以轻松地在网页中创建3D图形。下面我…

云蝠智能 Voice Agent 落地展会邀约场景:重构会展行业的智能交互范式

一、行业痛点与 AI 破局在会展行业数字化转型的浪潮中&#xff0c;传统展会邀约模式面临多重挑战&#xff1a;人工外呼日均仅能处理 300-500 通电话&#xff0c;且无效号码占比高达 40% 以上&#xff0c;导致邀约效率低下。同时&#xff0c;个性化邀约话术设计依赖经验&#xf…

idea如何打开extract surround

在 IntelliJ IDEA 中&#xff0c;"Extract Surrounding"&#xff08;提取周围代码&#xff09;通常指 ​将一段代码提取到新的方法、变量或类中&#xff0c;但更常见的操作是 ​​"Surround With"&#xff08;用代码结构包围&#xff09;​。以下是两种场景…

window显示驱动开发—XR_BIAS 和 BltDXGI

Direct3D 运行时调用驱动程序的 BltDXGI 函数&#xff0c;以仅对XR_BIAS源资源执行以下操作&#xff1a;复制到也XR_BIAS的目标未修改的源数据的副本可接受点样本的拉伸旋转由于 XR_BIAS 不支持 MSAA) (多个示例抗锯齿&#xff0c;因此驱动程序不需要解析XR_BIAS资源。核心规则…

web网页开发,在线%ctf管理%系统,基于html,css,webform,asp.net mvc, sqlserver, mysql

webform,asp.net mvc。数据库支持mysql,sqlserver经验心得 每次我们写crud没啥技术含量&#xff0c;这没法让咱们进入大厂&#xff0c;刚好这次与客户沟通优化方案建议&#xff0c;咱们就把能加的帮他都加上去。一个ctf管理系统基本crud&#xff0c;并进行不同分层开发&#xf…