Description
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.
Solution
- 首先对输入数组排序
- count表示局部有续子串长度,result表示最大有序子串长度(即返回的结果)
- 逐个迭代,当nums[i] == nums[i-1] + 1时,count++;当nums[i] == nums[i-1]时,跳过,不处理;否则,nums[i]和nums[i-1]不连续且不相等,则局部有序终止了,重置count。
Code
import java.util.Arrays;
public class Solution {
public int longestConsecutive(int[] nums) {
// 初始化
int result = nums.length == 0 ? 0 : 1;
int count = 1;
// 排序
Arrays.sort(nums);
// 逐个迭代判断
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i + 1] == nums[i]+1) {
// 计数器加1
count++;
if (result < count)
result = count;
} else if(nums[i+1] != nums[i]) {
// 重置计数器
count = 1;
}
}
return result;
}
}