)
最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
分析
在拿到数组时首先应该去重,再进行排序,最后统计最长序列;
由于我使用的是Java语言,去重我首选的是set集合,逐个存入再取出,需要注意的是因为考虑到数组长度改变,所以需要创建一个新的数组(int[] arrs=new int[set.size()])存储从set集合中取出的去完重的数;
拿到新数组后,使用Arrays.sort(arrs);进行排序;
最后进行最长序列的统计:
首先需要排除空数组的情况,遇空直接return 0;
需要注意哪怕数组中只有一个数,最长序列也是1,所以最长序列统计应该从1开始:int longest=1;//用来记录最长序列
需要一个计数器:int count=1;来计数,知道序列断了才开始从新计数,从新计数前应该将count与longest进行比较,始longest始终保持最大的数值。
代码片
.
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length==0){
//排除空数组
return 0;
}else{
//去重
Set<Integer> set=new HashSet<>();
for (int num : nums) {
set.add(num);
}
int[] arrs=new int[set.size()];
int k=0;//计数
for (Integer integer : set) {
arrs[k]=integer;
k++;
}
Arrays.sort(arrs);
int longest=1;
int count=1;
int value=arrs[0];
for(int i=1;i<arrs.length;i++){
if(value+1==arrs[i]){
count++;
}else{
if(count>longest){
longest=count;
}
count=1;
}
if(count>longest){
longest=count;
}
value=arrs[i];
}
return longest;
}
}
}
作者:LiuK版权所有转载需注明出处