Longest Consecutive Sequence
33% Accepted
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Have you met this question in a real interview? Yes
Example
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.
Clarification
Your algorithm should run in O(n) complexity.
Tags Expand
- Array
思路
- 因为是O(n),所以就不能排序等方法,动规去做好像目测也是不能在O(n)实现的
- 所以想到hashmap,用空间换时间
- 花了一点时间debug,因为程序中hashtable.remove(cur) 写反了 cur = cur+1;
public class Solution {
public int longestConsecutive(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int len = nums.length;
Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < len; i++) {
if (!set.contains(nums[i])) {
set.add(nums[i]);
}
}
int maxLen = 0;
for (int i = 0; i < len; i++) {
if (set.contains(nums[i])) {
int countLen = 1;
int cur = nums[i];
set.remove(cur);
while (set.contains(++cur)) {
countLen++;
set.remove(cur);
}
cur = nums[i];
while (set.contains(--cur)) {
countLen++;
set.remove(cur);
}
maxLen = Math.max(maxLen, countLen);
}
}
return maxLen;
}
}