首页 > Windows开发 > 详细

ACWing 最长连续不重复子序列(双指针)

时间:2020-03-22 19:09:31      阅读:51      评论:0      收藏:0      [点我收藏+]

原题
题意很好理解,主要通过本题理解一下双指针,我们可以用两个指针i,j分别记录子序列的结尾位置和开头位置。我们先枚举结尾位置i,因为要找最长的不重复连续子序列,j就代表从i往前最远能够到达的位置。而要判断某个数是否出现过,我们可以开一个数组s[N]来记录每个数出现的次数,我们在枚举i时,就可以将s[a[i]]++,当s[a[i]]>1时,就代表a[i]已经出现过,我们就只需找到这个a[i],将a[i]这个数之前的所有数剔除,然后让j++,直到j位于a[i]这个数之后一位就好了,然后记录最大i-j+1
AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[100005],s[100005],n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
        int i,j,res=0;
        i=j=1;
        for( i=1;i<=n;i++)
        {
          s[a[i]]++;
          while(s[a[i]]>1)
          {
             s[a[j]]--;//将之前的数剔除
             j++;
          }
          res=max(res,i-j+1);
        }
        cout<<res;
 return 0;
}

ACWing 最长连续不重复子序列(双指针)

原文:https://www.cnblogs.com/Pecoz/p/12547592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!