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
.
1. HashMap. 时间: O(N) 空间: O(N)
2. sort + search. 时间: O(NlgN) 空间:O(1) ***注意sort后前后两个元素相等的情况!!
public class Solution {
public int longestConsecutive(int[] num) {
//map num[i] to 0/1 (represent that if it has been visited)
HashMap<Integer, Integer> map = new HashMap<>();
for (int i : num) {
map.put(i, 0);
}
int max = 1;
for (int i : num) {
if (map.get(i) == 1) continue;
int temp = i;
int thismax = 1;
while (map.containsKey(temp + 1)) {
thismax++;
temp++;
map.put(temp, 1);
}
temp = i;
while (map.containsKey(temp - 1)) {
thismax++;
temp--;
map.put(temp, 1);
}
max = Math.max(max, thismax);
}
return max;
}
}
public class Solution {
public int longestConsecutive(int[] num) {
Arrays.sort(num);
int max = 1;
int thismax = 1;
for (int i = 1; i < num.length; i++) {
if (num[i] == num[i-1]) continue;
if (num[i]-1 == num[i-1]) {
thismax++;
max = Math.max(max, thismax);
} else {
thismax = 1;
}
}
return max;
}
}