hnust 最长连续相异子串

来源:互联网 发布:idea打印不出sql 编辑:程序博客网 时间:2024/06/14 19:38

链接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; }