zoukankan      html  css  js  c++  java
  • AcWing799 最长连续不重复子序列

    题目描述

    给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。

    输入格式

    第一行包含整数n。
    第二行包含n个整数(均在0~100000范围内),表示整数序列。

    输出格式

    共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。

    数据范围

    (1<=n<=100000)

    输入样例

    5
    1 2 2 3 5

    输出样例

    3

    思路:双指针法,快指针j具有一个单调性,即它只能向右走不能返回,在检查一个区间是否有重复元素时,用数组s[]记录每个数值出现的次数。结合样例和代码体会吧。

    代码:
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int maxn = 100003;
    int a[maxn];
    int s[maxn];
    int main(){
        int n; cin >> n;
        int res = -1;
        for(int i = 0; i < n; ++i) cin >> a[i];
        for(int i = 0, j = 0; 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;
    }
    
  • 相关阅读:
    Spark基础
    flink杂记
    算法
    算法小结
    Java内存模型
    LeetCode---Backtracking && DP
    LeetCode---Sort && Segment Tree && Greedy
    LeetCode---Depth-first && Breadth-first
    LeetCode---Bit Manipulation && Design
    MD5
  • 原文地址:https://www.cnblogs.com/patrolli/p/11628416.html
Copyright © 2011-2022 走看看