您的位置:首页 > 产品设计 > UI/UE

Unique Snowflakes UVA - 11572

2017-08-14 20:05 405 查看
题目传送门

题意:给你一个序列,问你最长的连续序列里没有重复的数字

思路:这个题目其实就是一个尺取法的题目,用set来维护一下状态就可以了。

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>

#define MAXN 1000010
#define MAXE 210
#define INF 10000000
#define MOD 1000000007
#define LL long long
#define pi acos(-1.0)

using namespace std;

int arr[MAXN];
set<int> Set;

int main() {
std::ios::sync_with_stdio(false);
int T;
cin >> T;
for (int kase = 1; kase <= T; ++kase) {
Set.clear();
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
int max_length = 0;
int left = 0, right = 0;
while (right < n) {
while (right < n && !Set.count(arr[right])) {
Set.insert(arr[right]);
right++;
}
max_length = max(max_length, right - left);
if (right == n)
break;
Set.erase(arr[left]);
left++;
max_length = max(max_length, right - left + 1);
}
cout << max_length << endl;
}
return 0;
}

/*
1
5
1 2 3 2 1
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: