当前位置: 首页 > news >正文

蓝桥杯备考------>双指针(滑动窗口)

来看哈我们这道例题

我们第一种想法应该就是暴力求解,枚举每个子数组

当我们枚举第一个数的时候,我们要从第一个数开始挨个枚举每个结尾

如图,以第一个数开头的最长不重复数我们就枚举完了

然后我们让两个指针全部到第二个数

再枚举第二个数能到达的最长子数组

如图还是到这就停止了,我们再枚举第三个数

依旧是到这里停止,我们其实啊,没必要非得每次枚举都退回去,我们可以让l++,直到达到合法的区间之后,再继续往后枚举长度

也就是说 当我们到这个状态的时候,别让r退回去了,我们让左指针不断加加,直到达到一个合法的区间之后,再让r往后走

这道题,就算我们想用暴力枚举,我们也用不了的

因为暴力枚举时间复杂度是N平方,我们会超时的

而滑动窗口时间复杂度只是O(N),我们最差的情况就算l和r把数组都扫描了一遍,此时时间复杂度是N+N  也就是O(N)

我们再来捋一遍我们滑动窗口的步骤

step1:初始化,l=1 r=1 unordered map<int,int> mp;

step2:进窗口,r指针指向的元素在哈希表++

step3:判断是否为合法区间 即mp[a[r]]<=1→如果不合法就step5:出窗口 也就是不断让mp[a[l]]-- l++,直到mp[a[r]]<=1

step6:已经是合法区间了,我们更新长度

#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 1e6+10;
int a[N];
int n;
int main()
{
	int T;cin >> T;
	while(T--)
	{
		cin >> n;
		for(int i = 1;i<=n;i++)
		{
			cin >> a[i];
		}
		unordered_map <int,int> mp;
		int l = 1,r = 1;
		int ret = 0;
		while(r<=n)
		{
			mp[a[r]]++;//进窗口 
			while(mp[a[r]]>1)//判断 
			{
				mp[a[l]]--;//出窗口 
				l++;
			}
			ret = max(ret,r-l+1);//更新结果 
			r++;
		}
		cout << ret << endl;
	}
	
	
	
	
	
	return 0;
}

http://www.dtcms.com/a/99841.html

相关文章:

  • 华为OD机试2025A卷 - 最大值(Java Python JS C++ C )
  • PyTorch 2.6.0没有对应的torch-sparse版本,不要下载pytorch最新版本,否则用不了图神经网络torch_geometric
  • vmware_unbantu刷新IP
  • EtherNet/IP转ProfiNet协议转换网关驱动西门子PLC与流量计的毫秒级压力同步控制
  • 洛谷题单1-P5706 【深基2.例8】再分肥宅水-python-流程图重构
  • MySQL单表查询、多表查询
  • linux实现rsync+sersync实时数据备份
  • Redis-快速入门
  • GPT Actions
  • 【硬件测试】基于FPGA的16QAM+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
  • 【Find My全球市场观察:中国制造如何改写游戏规则?】
  • 游戏引擎学习第191天
  • 【Python】工作笔记:返回当月第一天、昨天;上月第一天、当天;全年节假日
  • 淘宝客户端动态化页面搭建
  • Linux课程学习一
  • 【区块链安全 | 第五篇】DeFi概念详解
  • Kubernetes比同规格虚拟机性能相差多少?
  • 《Express:Node.js 里的 “闪电侠”》
  • Playwright从入门到实战:比Selenium更快的数据爬取案例实战
  • STL-string容器
  • 蓝桥杯嵌入式学习笔记
  • SQL IF(xxx, 1, 0) 窗口函数
  • 【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端
  • Supabase 匿名密钥与服务角色密钥详细对比文档
  • .NET 9 中的新增功能:关键更新和 C# 12 功能简化
  • C#核心学习(一)面向过程与面向对象编程---初识类和对象
  • 深入理解MySQL聚集索引与非聚集索引
  • fetch的语法规则及常见用法
  • EasyExcel 与 Apache POI:Java 操作 Excel 的详解
  • 6-1-1 利用AI完成一个可视化看板