LeetCode热题100_最长连续序列
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
排序速度快,思路简单,但是时间复杂度高
方法二 哈希表
速度稍微慢了一点
时间复杂度低 O(n)
/*
* 最长连续序列
* 方法一 排序
* */
/*public static int longestConsecutive(int[] nums) {
if (nums.length==0){
return 0;
}
int result = 0;
int counts = 1;
Arrays.sort(nums);
for (int i=1;i< nums.length;i++){
if (nums[i]==nums[i-1]){
continue;
}
if (nums[i]-(nums[i-1]+1)==0){
counts++;
}else{
//连续中断
result = Math.max(result,counts);
counts=1;
}
}
return Math.max(result,counts);
}*/
/*
* 方法二 哈希表
* */
public static int longestConsecutive(int[] nums) {
Set<Integer> numSet = new HashSet<>();
for (int num : nums) {
numSet.add(num);
}
int longestStreak = 0;
for (int num:numSet){
if (!numSet.contains(num-1)){
int currentNum = num;
int currentStreak = 1;
while (numSet.contains(currentNum+1)){
currentNum++;
currentStreak++;
}
longestStreak = Math.max(longestStreak,currentStreak);
}
}
return longestStreak;
}