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.
思路:这个是我看到的最容易理解的版本。
O(n)就说明不能用sort 的方法,sort的最高只能nlog(n);
解决的办法就是利用hashset 来用空间换时间,每个元素以增长的方式来进行扩充,然后算每段长度的len,用一个maxlen来update即可。
图解:元素是连续的,但是是断开的。
———— ——— ————————
用len的方式来算区间,算是这个题目的聪明之处。
class Solution {
public int longestConsecutive(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
HashSet<Integer> set = new HashSet<>();
for(int num: nums) {
set.add(num);
}
int globallen = 1;
for(int num: nums) {
int curlen = 1;
int left = num - 1;
while(set.contains(left)) {
set.remove(left);
curlen++;
left--;
}
int right = num + 1;
while(set.contains(right)) {
set.remove(right);
curlen++;
right++;
}
globallen = Math.max(globallen, curlen);
}
return globallen;
}
}