zoukankan      html  css  js  c++  java
  • ACWing 最长连续不重复子序列(双指针)

    原题
    题意很好理解,主要通过本题理解一下双指针,我们可以用两个指针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;
    }
    
    
    戒骄戒躁,百炼成钢!
  • 相关阅读:
    python
    springboot-mybatis-pagehelper(分页插件)
    图片验证码工具类
    http工具类
    page工具类
    生成count位随机数工具类
    日期工具类
    dozer工具类
    list自定义排序工具类
    fastJson工具类
  • 原文地址:https://www.cnblogs.com/Pecoz/p/12547592.html
Copyright © 2011-2022 走看看