给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
数据范围:
,数组中的值满足 
要求:空间复杂度
,时间复杂度
/**
* max increasing subsequence
* @param arr int整型一维数组 the array
* @param arrLen int arr数组长度
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
#include <stdlib.h>
int inc(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int MLS(int* arr, int arrLen ) {
// write code here
qsort(arr,arrLen,sizeof(int),inc);
int max=0;
for(int i=0;i<arrLen;i++)
{
int sum=1;
if(arr[i]+1==arr[i+1])
{
for(int j=i;j<arrLen-1;j++)
{
if(arr[j]+1==arr[j+1])
{
sum+=1;
}
else if(arr[j]==arr[j+1])
{
continue;
}
else
{
i=j;
break;
}
}
}
if(max<sum) max=sum;
}
return max;
} static const int MAX_N = 100000000;
static int bv[MAX_N/32+1];
inline void setb(int i) { bv[i/32] |= (0x01 << (i % 32)); }
inline int getb(int i) { return (bv[i/32] >> (i % 32)) & 0x01; }
int MLS(int* arr, int arrLen) {
memset(bv, 0x00, sizeof(bv));
for (int i=0; i<arrLen; i++)
setb(arr[i]);
int len = 1, maxlen = 1;
for (int i=2; i<MAX_N; i++)
if (getb(i)) {
if (getb(i-1)) len++;
} else {
if (len > maxlen) {
maxlen = len;
if (maxlen > MAX_N - i) break; // stop early
}
len = 1;
}
return maxlen;
}