题目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;
}
浙公网安备 33010602011771号