您的位置:首页 > 产品设计 > UI/UE

[容易] UVa OJ 11572 Unique Snowflakes 滑动窗口

2017-09-05 10:55 357 查看
题目描述

基本思路:

本题实际上就是找各元素互不相同的最长连续子序列,因为是连续的,所以可以采用滑动窗口来做,若L为窗口的左端点,R为窗口的右端点,则先扩展R,如果不能继续扩展,则扩展L,继续扩展R,直到R指向全序列的最后一个元素。

具体代码:

#include <iostream>
#include <set>
#include <vector>

using namespace std;
vector<int> sf;
int solve()
{
int ans=1;
//int i=0,j=0;
int n=sf.size();
set<int> seq;
seq.clear();
seq.insert(sf[0]);
int i=0,j=1;
for(;i<n;++i)
{
for(;j<n;++j)
{
if(seq.count(sf[j]))
break;
else
seq.insert(sf[j]);
}
ans=max(ans,j-i);
if(j>=n)
break;
seq.erase(sf[i]);
}
return ans;
}

int main()
{
//freopen("input.txt","r",stdin);
int kn;
cin>>kn;
for(int kase=1;kase<=kn;++kase)
{
sf.clear();
int n;
cin>>n;
if(n==0)
{
cout<<"0"<<endl;
continue;
}
for(int i=0;i<n;++i)
{
int t;
cin>>t;
sf.push_back(t);
}
cout<<solve()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息