链接http://acm.hnust.edu.cn/JudgeOnline/problem.php?cid=1434&pid=7
题目描述
给出一个含有n个数的序列,求一段最长的连续子序列的长度且这个子序列中不存在相同的数;
思路:滑动窗口,used[i]数组标记数为i上一次出现的位置,当遇到值在之前出现过时,更改l = used[i],更改新的窗口区间 即模拟窗口滑动 循环打擂求最大值
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=100005;
int used[N];//上一次出现的下标
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{ memset(used,0,sizeof(used));
int l =0,r = 0;
int ans = -10000000;
for(int i=1; i<=n; i++)
{
int x;
scanf("%d",&x);
if(!used[x]||used[x]<l)
{
r = used[x] = i;
}
else
{
l = used[x];
used[x] = r = i;
}
ans=max(ans,r-l);
}
cout<<ans<<endl;
}
return 0;
}