【跟着灵神刷力扣】定长滑动窗口

檐角炊烟软暮光,云层裂隙漏斜阳。
新茧裹着旧伤结,老门推开陈酒香;
烛火飘摇明灭处,闷雷沉在青砖墙。
蜻蜓点破春潭影,一池星碎待风狂。

    • 个人定长滑窗解题模板
    • §1.1 基础非会员题目
      • 1456. 定长子串中元音的最大数目
      • 643. 子数组最大平均数 I
      • 1343. 大小为 K 且平均值大于等于阈值的子数组数目
      • 2090. 半径为 k 的子数组平均值
      • 2379. 得到 K 个黑块的最少涂色次数
      • 2841. 几乎唯一子数组的最大和
      • 2461. 长度为 K 子数组中的最大和
      • 1423. 可获得的最大点数
      • 1052. 爱生气的书店老板
      • 1652. 拆炸弹


个人定长滑窗解题模板

  1. 初始化窗口及累积变量
    确定窗口长度 k,处理非法输入(如 k > n 直接返回)。
    我的习惯性写法:
		int right;for(right=0;right<k;++right){……维护条件}    

这样的写法有两点好处:一是right可以留存而非在for的局部结束后被销毁,用于下一次在k+1到l的遍历;二,也是最重要的,始终是后面的遍历成为[,)左闭右开区间,遍历后面时left始终等于right-k,不用考虑加减1的情况

  1. 滑动窗口更新累积值
    从索引 k 开始遍历,每次右移窗口:
    ​添加新元素:当前右指针 right 对应值加入累积。
    ​移除旧元素:左边界元素(索引 right - k)从累积中扣除。

  2. 实时更新最终结果
    每次滑动后立即计算当前窗口状态,更新结果变量。


§1.1 基础非会员题目

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

1456. 定长子串中元音的最大数目
个人题解:

class Solution {
public:bool isVowel(char c){return c=='a'||c=='e'||c=='i'||c=='o'||c=='u';}int maxVowels(string s, int k) {int l=s.size(),maxx=0,cnt=0;int right;for(right=0;right<k;++right){if(isVowel(s[right])) cnt++;}maxx=cnt;for(;right<l;++right){if(isVowel(s[right])) cnt++;if(isVowel(s[right-k])) cnt--;maxx=max(maxx,cnt);}return maxx;}
};

643. 子数组最大平均数 I

643. 子数组最大平均数 I
个人题解:

class Solution {
public:double findMaxAverage(vector<int>& nums, int k) {int l=nums.size();double sum=0,maxx=0;int right;for(right=0;right<k;++right){sum+=nums[right];}  maxx=sum/k;for(;right<l;++right){sum+=nums[right];sum-=nums[right-k];double avr=sum/k;maxx=max(avr,maxx);}  return maxx;}
};

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

1343. 大小为 K 且平均值大于等于阈值的子数组数目
个人题解:

class Solution {
public:int numOfSubarrays(vector<int>& arr, int k, int threshold) {int l=arr.size(),cnt=0;double sum=0,hold=double(threshold);int right;for(right=0;right<k;++right){sum+=arr[right];}    if(sum/k>=hold) cnt++;for(;right<l;++right){sum+=arr[right];sum-=arr[right-k];if(sum/k>=hold) cnt++;}return cnt;}
};

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

2090. 半径为 k 的子数组平均值
个人题解:

class Solution {
public:vector<int> getAverages(vector<int>& nums, int k) {int n=nums.size();long long sum=0;vector<int> avgs(n,-1);for(int right=0;right<n;++right){if(right<2*k) {sum+=nums[right];}else{sum+=nums[right];avgs[right-k]=sum/(2*k+1);sum-=nums[right-2*k];}}return avgs;}
};

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

2379. 得到 K 个黑块的最少涂色次数
个人题解:

class Solution {
public:int minimumRecolors(string blocks, int k) {int l=blocks.size(),cnt=0,minn=0;int right;for(right=0;right<k;++right) if(blocks[right]=='W') cnt++;minn=cnt;for(;right<l;++right){if(blocks[right]=='W') cnt++;if(blocks[right-k]=='W') cnt--;minn=min(minn,cnt);}return minn;}
};

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

2841. 几乎唯一子数组的最大和
个人题解:

class Solution {
public:long long maxSum(vector<int>& nums, int m, int k) {unordered_map<int,int> cnt;int l=nums.size(),judge=0;long long sum=0,ans=0;int right;for(right=0;right<k;++right) {if(cnt[nums[right]]==0) judge++;cnt[nums[right]]++;sum+=nums[right];} if(judge>=m) ans=sum;for(;right<l;++right){if(--cnt[nums[right-k]]==0) judge--;sum-=nums[right-k];if(cnt[nums[right]]++==0) judge++;sum+=nums[right];if(judge>=m) ans=max(ans,sum);}return ans;}
};

2461. 长度为 K 子数组中的最大和

2461. 长度为 K 子数组中的最大和
个人题解:

class Solution {
public:long long maximumSubarraySum(vector<int>& nums, int k) {unordered_map<int,int> cnt;int l=nums.size(),judge=0;long long sum=0,ans=0;int right;for(right=0;right<k;++right){if(cnt[nums[right]]++==0) judge++;sum+=nums[right];}if(judge==k) ans=sum;for(;right<l;++right){if(--cnt[nums[right-k]]==0) judge--;sum-=nums[right-k];if(cnt[nums[right]]++==0) judge++;sum+=nums[right];if(judge==k) ans=max(ans,sum);}return ans;}
};

1423. 可获得的最大点数

1423. 可获得的最大点数
个人题解:

class Solution {
public:int maxScore(vector<int>& cardPoints, int k) {vector<int> new_cardPoints(2*k);auto it=new_cardPoints.begin();it=copy(cardPoints.end()-k,cardPoints.end(),it);it=copy(cardPoints.begin(),cardPoints.begin()+k,it);int sum=accumulate(new_cardPoints.begin(),new_cardPoints.begin()+k,0);int ans=sum;for(int right=k;right<2*k;++right){sum+=new_cardPoints[right];sum-=new_cardPoints[right-k];ans=max(ans,sum);}return ans;}
};

1052. 爱生气的书店老板

1052. 爱生气的书店老板
个人题解:

class Solution {
public:int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes) {int n=customers.size();int ans=accumulate(customers.begin(),customers.end(),0);int right=0,sum=0,total_mud=0;for(;right<minutes;++right) if(grumpy[right]) sum+=customers[right],total_mud+=customers[right];int maxx=sum;for(;right<n;++right){if(grumpy[right]) sum+=customers[right],total_mud+=customers[right];if(grumpy[right-minutes]) sum-=customers[right-minutes];maxx=max(sum,maxx);}return ans-(total_mud-maxx);}
};

1652. 拆炸弹

1652. 拆炸弹
个人题解:

class Solution {
public:vector<int> decrypt(vector<int>& code, int k) {int l=code.size();vector<int> key(l,0);if(k>0){vector<int> new_code(2*l,0);auto it=new_code.begin();it=copy(code.begin(),code.end(),it);it=copy(code.begin(),code.end(),it);int sum=0,right=1;for(;right<=k;++right) sum+=new_code[right];int left=0;key[left++]=sum;for(;left<l;++left,++right){sum+=new_code[right];sum-=new_code[left];//或者是right-kkey[left]=sum;}}else if(k<0){vector<int> new_code(2*l,0);auto it=new_code.begin();it=copy(code.end()+k,code.end(),it);it=copy(code.begin(),code.end(),it);int sum=0,right=0;for(;right<-k;++right) sum+=new_code[right];int left=0;key[left++]=sum;for(;left<l;++left,++right){sum+=new_code[right];sum-=new_code[left-1];//或者是right+kkey[left]=sum;}}   return key;}
};

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

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

相关文章

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…

学习本地部署DeepSeek的过程(基于ollama)

DeepSeek除了支持在线调用服务接口外&#xff0c;还支持本地部署后调用本地服务&#xff0c;这样的好处是不需要api key&#xff0c;且资源独占&#xff0c;还能训练个人知识库。本文学习并记录本地部署DeepSeek的过程。   参考文献3中列出了不同模型对于电脑硬件的要求&…

文献分享: ColXTR——将ColBERTv2的优化引入ColXTR

1. ColXTR \textbf{1. ColXTR} 1. ColXTR原理 1.1. ColBERTv2 \textbf{1.1. ColBERTv2} 1.1. ColBERTv2概述 1.1.1. \textbf{1.1.1. } 1.1.1. 训练优化 1️⃣难负样本生成 初筛&#xff1a;基于 BM-25 \text{BM-25} BM-25找到可能的负样本重排&#xff1a;使用 KL \text{KL} KL…

Altium Designer数模电学习笔记

模电 电容 **退耦&#xff1a;**利用通交阻直&#xff0c;将看似直流的信号中的交流成分滤除 &#xff08;一般用在给MPU供电&#xff0c;尽量小一些&#xff0c;10nf~100nf~1uf以下&#xff09; **滤波&#xff1a;**也可以理解为给电容充电&#xff0c;让电容在电平为低时…

从指令集鸿沟到硬件抽象:AI 如何重塑手机与电脑编程语言差异——PanLang 原型全栈设计方案与实验性探索1

AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1 文章目录 AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1前言一、手机与电脑编程语言…

python 实现一个简单的window 任务管理器

import tkinter as tk from tkinter import ttk import psutil# 运行此代码前&#xff0c;请确保已经安装了 psutil 库&#xff0c;可以使用 pip install psutil 进行安装。 # 由于获取进程信息可能会受到权限限制&#xff0c;某些进程的信息可能无法获取&#xff0c;代码中已经…

C之(15)cppcheck使用介绍

C之(15)cppcheck使用介绍 Author: Once Day Date: 2025年3月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CS…

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …

CaiT (Class-Attention in Image Transformers):深度图像Transformer的创新之路

CaiT (Class-Attention in Image Transformers)&#xff1a;深度图像Transformer的创新之路 近年来&#xff0c;Transformers 模型在自然语言处理领域的成功逐渐扩展到了计算机视觉领域&#xff0c;尤其是图像分类任务中&#xff0c;Vision Transformer (ViT) 的提出打破了卷积…

Qt之MVC架构MVD

什么是MVC架构&#xff1a; MVC模式&#xff08;Model–view–controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controll…

数组,指针 易混题解析(二)

目录 一.基础 1. 2. 二.中等 1. 坑 2. 3.指针1到底加什么 三.偏难 1.&#xff08;小端 x86&#xff09; 2.通过数组指针进行偏移的时候怎么偏移 3. 大BOSS &#xff08;1&#xff09;**cpp &#xff08;2&#xff09;*-- * cpp 3 &#xff08;3&#xff09;*c…

数据建模流程: 概念模型>>逻辑模型>>物理模型

数据建模流程 概念模型 概念模型是一种高层次的数据模型&#xff0c;用于描述系统中的关键业务概念及其之间的关系。它主要关注业务需求和数据需求&#xff0c;而不涉及具体的技术实现细节。概念模型通常用于在项目初期帮助业务人员和技术人员达成共识&#xff0c;确保对业务需…

spring-security原理与应用系列:建造者

目录 1.构建过程 AbstractSecurityBuilder AbstractConfiguredSecurityBuilder WebSecurity 2.建造者类图 SecurityBuilder ​​​​​​​AbstractSecurityBuilder ​​​​​​​AbstractConfiguredSecurityBuilder ​​​​​​​WebSecurity 3.小结 紧接上一篇文…

结合代码理解Spring AOP的概念(切面、切入点、连接点等)

前情回顾 对AOP的理解 我这篇文章介绍了为什么要有AOP&#xff08;AOP解决了什么问题&#xff09;以及如何实现AOP。但在实现AOP的时候&#xff0c;并未探讨AOP相关概念&#xff0c;例如&#xff1a;切面、切入点、连接点等。因此&#xff0c;本篇文章希望结合代码去理解Spring…

【AI大模型】搭建本地大模型GPT-NeoX:详细步骤及常见问题处理

搭建本地大模型GPT-NeoX:详细步骤及常见问题处理 GPT-NeoX是一个开源的大型语言模型框架,由EleutherAI开发,可用于训练和部署类似GPT-3的大型语言模型。本指南将详细介绍如何在本地环境中搭建GPT-NeoX,并解决过程中可能遇到的常见问题。 1. 系统要求 1.1 硬件要求 1.2 软…

Copilot提示词库用法:调整自己想要的,记住常用的,分享该共用的

不论你是 Microsoft 365 Copilot 的新用户还是熟练运用的老鸟&#xff0c;不论你是使用copilot chat&#xff0c;还是在office365中使用copilot&#xff0c;copilot提示词库都将帮助你充分使用copilot这一划时代的产品。它不仅可以帮助你记住日常工作中常用的prompt提示词&…

Spring:AOP

一、AOP概念的引入 为了更好地介绍AOP&#xff0c;我们以登录作为示例。 首先&#xff0c;我们先来看一下登录的原理&#xff1a; 如图所示&#xff0c;这是一个基本的登录原理图&#xff0c;但是如果我们想要在这个登录过程上再添加一些新的功能&#xff0c;比如权限校验&am…

Ubuntu实时读取音乐软件的音频流

文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的&#xff0c;我需要在Ubuntu中&#xff0c;实时读取正在播放音乐的音频流&#xff0c;然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现&#xff0c;好处是可以直接利用Helvum…

CUDA 学习(4)——CUDA 编程模型

CPU 和 GPU 由于结构的不同&#xff0c;具有不同的特点&#xff1a; CPU&#xff1a;擅长流程控制和逻辑处理&#xff0c;不规则数据结构&#xff0c;不可预测存储结构&#xff0c;单线程程序&#xff0c;分支密集型算法GPU&#xff1a;擅长数据并行计算&#xff0c;规则数据结…

前端会话控制技术:cookie/session/token

目录 前端中的 Cookie、Session 和 Token&#xff1a;详解与应用1. Cookie1.1 什么是 Cookie&#xff1f;1.2 Cookie 的工作原理1.3 Cookie 的特点1.4 Cookie 的用途1.5 Cookie 的安全性 2. Session2.1 什么是 Session&#xff1f;2.2 Session 的工作原理2.3 Session 的特点2.4…