滑动窗口 + 算法复习

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

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;
} 
相关推荐
一路往蓝-Anbo4 分钟前
第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化
开发语言·数据结构·stm32·单片机·嵌入式硬件·链表·单例模式
疯狂的喵6 分钟前
实时信号处理库
开发语言·c++·算法
小O的算法实验室7 分钟前
2023年ESWA SCI1区TOP,地面车辆与无人机协同系统的多区域覆盖双层路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
啵啵鱼爱吃小猫咪11 分钟前
机器人标准DH(SDH)与改进DH(MDH)
开发语言·人工智能·python·学习·算法·机器人
pp起床17 分钟前
回溯算法 | part01
算法
iAkuya26 分钟前
(leetcode)力扣100 53课程表(深搜+拓扑排序)
算法·leetcode·职场和发展
范纹杉想快点毕业27 分钟前
嵌入式通信协议深度解析:从SPI/I2C到CAN总线的完整实现指南嵌入式工程师的炼成之路:从校园到实战的跨越
linux·运维·服务器·数据库·算法
啊阿狸不会拉杆27 分钟前
《数字信号处理》第10章-数字信号处理中的有限字长效应
算法·matlab·fpga开发·信号处理·数字信号处理·dsp
week_泽31 分钟前
GBDT 算法中构建第一个弱学习器(CART 回归树)-计算示例
学习·算法·回归·gbdt
傻小胖34 分钟前
16.ETH-状态树-北大肖臻老师客堂笔记
笔记·算法·区块链·哈希算法