给定一个无序的整数类型数组,求最长的连续元素序列的长度。 例如: 给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4 你需要给出时间复杂度在O(n)之内的算法
先排序,记住三个数 int count=1;//当前连续序列长度 int last=num[0];//上一个数字(连续判断条件) int max=1;//前面最大的连续序列长度 做的时候搞错了一个点,就是1,1,2,3,算连续三个,我算成连续四个了,后来改掉了
public int longestConsecutive(int[] num) {
// 给定一个无序的整数类型数组,求最长的连续元素序列的长度。
// 例如:
// 给出的数组为[100, 4, 200, 1, 3, 2],
// 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4
// 你需要给出时间复杂度在O(n)之内的算法
if(num.length<=1){
return num.length;
}
Arrays.sort(num);//对数组重数据进行一次排序
int count=1;//当前连续序列长度
int last=num[0];//上一个数字(连续判断条件)
int max=1;//前面最大的连续序列长度
for (int index=1;index<num.length;index++){
if (num[index]==last+1){
last=num[index];
count++;
}else if (num[index]==last){
continue;
}else{
last=num[index];
count=1;
}
max=count>max?count:max;
}
return max;
}
第七个是我,我以为有更好的方法,后来看了一下前面人思路,跟我的差不多.我多次测试发现运行时间也是变化的,所以时间长短应该是机器原因.