收集雪花 _站外题_ ****
不同的雪花往往有不同的形状。在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们。一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状。在收集的过程中,同学们不希望有重复的雪花。你可以从任意 a 时刻开始,在 b 时刻停止。a 到 b 时刻中间的雪花也都将被收集。他们希望收集的雪花最多。
Input
第一行一个正整数 n(<=1e6);
第 2 行 n 个非负整数表示 n 个时刻雪花的形状(<=1e9)。
Output
最多能收集雪花的数量。
输入数据
5
1 2 3 2 1
输出数据
3
代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],l,r,ans;
set<int> s;
int main(){
scanf("%d",&n);
l=r=1;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(s.count(a[i])){
while(a[l]!=a[i]) s.erase(a[l++]);
s.erase(a[l++]);
}
s.insert(a[i]);
ans=max(ans,r-l+1);
r++;
}
printf("%d",ans);
return 0;
}
代码40分时间超限求调!