题目1:最长连续不重复子序列

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

输入格式

第一行包含整数n

第二行包含n个整数,表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

输入样例:

5
1 2 2 3 5

输出样例:

3

代码

 

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;


int main()
{
    int n;
    cin >> n;
    vector<int> vec;
    for (int i = 0; i < n; i++)
    {
        int tmp;
        cin >> tmp;
        vec.push_back(tmp);
    }
    int pre = 0;        //区间左端点
    int post = 0;       //区间右端点
    map<int, vector<int>> m;
    int max_length = 0;
    while (post < vec.size())
    {
        if (m.find(vec[post]) == m.end())
        {
            max_length = max(max_length, (post - pre + 1));
            m.insert({ vec[post],{1,post} });
            post++;
        }
        else
        {
            int tmp = m[vec[post]][1];
            for (int j = pre; j <= tmp; j++)
            {

                if (m.find(vec[j]) != m.end())
                {
                    m.erase(vec[j]);
                }
            }
            pre = tmp + 1;
            m.insert({ vec[post],{1,post} });
            post++;
        }
    }
    cout << max_length << endl;
    return 0;
}

 

posted on 2022-09-21 09:14  yc-limitless  阅读(31)  评论(0)    收藏  举报