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;s[i];i++){

//1.进入窗口

if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'){

vowel++;

}

if(i<k-1){

continue;

}

//2.更新答案

ans=MAX(ans,vowel);

//3.离开窗口

char out=s[i-k+1];

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

{

vowel--;

}

}

return ans;

}

相关推荐
使二颗心免于哀伤1 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
悠哉悠哉愿意1 小时前
【电赛学习笔记】MaxiCAM 项目实践——与单片机的串口通信
笔记·python·单片机·嵌入式硬件·学习·视觉检测
快乐肚皮1 小时前
ZooKeeper学习专栏(五):Java客户端开发(原生API)详解
学习·zookeeper·java-zookeeper
慕y2741 小时前
Java学习第七十二部分——Zookeeper
java·学习·java-zookeeper
岩中竹2 小时前
广东省省考备考——常识:科技常识(持续更新)
笔记
★YUI★2 小时前
学习游戏制作记录(剑投掷技能)7.26
学习·游戏·unity·c#
Olrookie2 小时前
若依前后端分离版学习笔记(三)——表结构介绍
笔记·后端·mysql
蓝桉8023 小时前
opencv学习(图像金字塔)
人工智能·opencv·学习
rannn_1113 小时前
Java学习|黑马笔记|Day23】网络编程、反射、动态代理
java·笔记·后端·学习
go54631584653 小时前
中文语音识别与偏误检测系统开发
开发语言·人工智能·学习·生成对抗网络·数学建模·语音识别