滑动窗口 + 算法复习

维护一个满足条件的窗口大小,然后进行双指针移动

1.最长子串

题目链接:1.最长子串 - 蓝桥云课

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int k;
signed main()
{
	int max_len=0,left=0;
	cin>>s>>k;
	unordered_map<char,int>nums; //滑动窗口双指针
	for(int right=0; right<s.size(); right++)
	{
		nums[s[right]]++;
		while(nums[s[right]]>k) //如果某个字符的频率超过了 k,则缩小窗口
		{
			nums[s[left]]--;
			left++;
		}
		max_len=max(max_len,right-left+1);
	}
	cout<<max_len<<endl;
	return 0;
}

2.满足条件的子串个数

题目链接:6.满足条件的子串个数 - 蓝桥云课

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int k;
signed main()
{
	int sum=0,left=0;
	cin>>s>>k;
	unordered_map<char,int>nums; //滑动窗口双指针
	for(int right=0; right<s.size(); right++)
	{
		nums[s[right]]++;
		while(nums[s[right]]>k) //如果某个字符的频率超过了 k,则缩小窗口
		{
			nums[s[left]]--;
			left++;
		}
		sum+=(right-left+1); //以新right新形成的好串的数量
//		abc
//		a    a 1
//		ab   b ab 2
//		abc  c bc abc 3
	}
	cout<<sum<<endl;
	return 0;
}

3.区间平均值

题目链接:0区间平均值 - 蓝桥云课

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
signed main()
{
	cin>>t;
	while(t--)
	{
		int n,k;
		int x[110],sum[110];
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>x[i];
			sum[i]=sum[i-1]+x[i];
		}
		cin>>k;
		while(k--)
		{
			int l,r;
			cin>>l>>r;
			printf("%.2f\n",1.0*(sum[r]-sum[l-1])/(r-l+1)); 
		}
	}
	return 0;
} 
相关推荐
SilentSamsara几秒前
模型部署方案选型:REST/gRPC/批量推理/边缘部署的场景决策
人工智能·深度学习·算法·机器学习
zzz_23687 分钟前
【Java实习面试算法冲刺】哈希!
java·算法·面试
大耳朵糊涂8 分钟前
找前/后驱节点
算法
孤狼warrior13 分钟前
从冒泡到传送带流水线:一个3D沉浸式算法靶场,让思想的伟力改变世界
python·算法·typescript
bu_shuo23 分钟前
计算机二级学习-查找和排序
学习·算法·排序算法
Sam092744 分钟前
【AI 算法精讲 13】朴素贝叶斯:文本分类的基石
人工智能·python·算法·ai
SilentSamsara1 小时前
模型可解释性业务化:SHAP/LIME 的业务汇报与合规审查
人工智能·算法·机器学习·自动化
byte轻骑兵1 小时前
【LE Audio】CSIP精讲[5]: 蓝牙协同设备组的安全防护体系与实战规范
算法·安全·音频·le audio·低功耗音频
剑挑星河月1 小时前
35.搜索插入位置
java·数据结构·算法·leetcode
闪电悠米1 小时前
力扣hot100-438.找到字符串中所有字母异位词-固定长度滑动窗口详解
linux·服务器·数据结构·算法·leetcode·滑动窗口·力扣hot100