Jessica's Reading Problem
Jessica's Reading Problem
SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net)
双指针
假设当前枚举的区间是 , 且是以 为右端点的最大的可以满足条件的 , 那么 时这个 肯定还能满足条件,所以 不会回退,可以用双指针
用 map 记录当前区间是否能覆盖所有知识点 (now.size() == m), 当某一个知识点的次数为 0 时,在 map 里删去
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
int n;
int a[N];
int main()
{
scanf("%d\n", &n);
map<int, int> alls;
for (int i = 1; i <= n; i++)
{
scanf("%d", a + i);
alls[a[i]]++;
}
int m = alls.size();
int ans = n;
map<int, int> now;
for (int l = 1, r = 1; r <= n; r++)
{
now[a[r]]++;
while(l <= r && now.size() == m)
{
ans = min(ans, r - l + 1);
now[a[l]]--;
if (now[a[l]] == 0)
now.erase(a[l]);
l++;
}
}
printf("%d\n", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!