题目描述
给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
输入描述:
输出两行,第一行包括一个整数n( 1 \leq n \leq10^5 )(1≤n≤105),第二行包含n个整数,分别代表arr[i](1 \leq arr[i] \leq 10^8 )(1≤arr[i]≤108)
输出描述:
输出一个整数,代表最长连续子序列的长度。
示例1
输入
6 100 4 200 1 3 2
输出
4
示例2
输入
3 1 1 1
输出
1
备注:
时间复杂度(nlog_2n),空间复杂度(n)。
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int merge(map<int, int> &m, int less, int more){
int left = less-m[less]+1;
int right = more+m[more]-1;
int len=right-left+1;
m[left]=len;
m[right]=len;
return len;
}
int getLongestSeq(vector<int> arr, int n){
if(arr.empty() || n<=0) return 0;
int max