Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.
Your algorithm should run in O(n) complexity.
Difficulty: Hard
Solution 1: sort first and then traverse(logn)
public class Solution {
public int longestConsecutive(int[] nums) {
int ans = 1;
int len = nums.length;
if(len == 0)
return 0;
if(len == 1)
return 1;
Arrays.sort(nums);
int pre = nums[0], count = 1;
for(int i = 1; i < len; i++){
if(nums[i] - pre == 1){
count++;
ans = Math.max(ans, count);
pre = nums[i];
}
else if(nums[i] - pre > 1){
count = 1;
pre = nums[i];
}
}
return ans;
}
}
Solution 2: Use HashSet (n):
public class Solution {
public int longestConsecutive(int[] nums) {
int len = nums.length;
if(len == 0)
return 0;
if(len == 1)
return 1;
Set<Integer> set = new HashSet<Integer>();
for(int i : nums){
set.add(i);
}
int ans = 1;
for(int i : nums){
int count = 1, left = i - 1, right = i + 1;
while(set.contains(left)){
set.remove(left);
left--;
count++;
}
while(set.contains(right)){
set.remove(right);
right++;
count++;
}
ans = Math.max(ans, count);
}
return ans;
}
}

本文介绍了一种寻找整数数组中最长连续元素序列的算法。通过两种解决方案:排序遍历及哈希集合方法,在O(n)的时间复杂度内完成任务。适用于不连续整数序列的处理。

3万+

被折叠的 条评论
为什么被折叠?



