25.1.10学习笔记(算法(滑动窗口))

题目:在leetcode上

解释:什么是滑动窗口呢,在这道题里面,子串的长度为k,所以我们就可以将这个子串看为一个窗口,每次去统计窗口里面有多少满足要求,然后进行相关值的加减,滑动就体现在子串的第一个元素离开窗口,紧接着本来在窗口后的元素进入窗口,这样的步骤就像是窗口向后滑动了一样。

优点:这样相比较暴力求解,大大减小了运算量,复杂度为o(n),相对于暴力的o(nk)少了很多。

下面是按照这个算法写的代码

#define MAX(a,b) (a)>(b)?(a):(b)

int maxVowels(char* s, int k) {

int ans=0,vowel=0;

for(int i=0;si;i++){

//1.进入窗口

if(si=='a'||si=='e'||si=='i'||si=='o'||si=='u'){

vowel++;

}

if(i<k-1){

continue;

}

//2.更新答案

ans=MAX(ans,vowel);

//3.离开窗口

char out=si-k+1;

if(out=='a'||out=='e'||out=='i'||out=='o'||out=='u')

{

vowel--;

}

}

return ans;

}

相关推荐
是一个Bug8 小时前
Agent(智能体)应用 的入门学习路径
学习·机器学习
2301_809051148 小时前
Linux 网络编程 学习笔记
linux·网络·学习
eggcode9 小时前
【Qt学习】Linux(ARM架构)在线安装Qt6.x
linux·qt·学习·arm
鹏北海-RemHusband10 小时前
Go 语言进阶笔记 — 面向 JS/TS 前端开发者
笔记·golang
_李小白10 小时前
【android opencv学习笔记】Day 26: 滤波算法之低通滤波与图像缩放插值
android·opencv·学习
Bechamz11 小时前
大数据开发学习Day43
大数据·学习
nnsix12 小时前
Unity QFramework ResKit、UIKit 笔记
笔记
摇滚侠13 小时前
Java 零基础全套教程,反射机制,笔记 187-188
java·开发语言·笔记
【云轩】13 小时前
如何设计一台能模拟电机的电子负载:一个硬件工程师的实战笔记
笔记·嵌入式硬件