findingsea's Studio.

Longest Consecutive Sequence@LeetCode

Word count: 327 / Reading time: 2 min
2015/04/22 Share

Longest Consecutive Sequence

本题直观的解法就是排序之后遍历,但是题目要求只用O(n)的复杂度,那么先排序显然是无法满足要求的。

那么这种『显然要遍历所有元素,但是却只给了O(n)的复杂度』,这样就想到了HashMap。把数组中的每个元素都放入一个HashMap中为keyvalueboolean类型,表示该元素有没有访问过。然后,对于数组中的每个元素,要是没有被访问过,就对其进行计数——往前遍历及往后遍历,直到下一个元素不存在于表中为止。那么这样就保证了在整个计数过程中,所有元素都只被访问了一次。

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Solution {
public int longestConsecutive(int[] num) {
HashMap<Integer, Boolean> visited = new HashMap<Integer, Boolean>();
int length = num.length, max = 0;
for (int n : num) {
visited.put(n, false);
}
for (int i = 0; i < num.length; i++) {
int n = num[i];
if (visited.get(n)) {
continue;
}
int count = 1;
for (int left = n - 1; left >= n - length + 1; left--) {
if (visited.containsKey(left)) {
visited.put(left, true);
count++;
} else {
break;
}
}
for (int right = n + 1; right <= n + length - 1; right++) {
if (visited.containsKey(right)) {
visited.put(right, true);
count++;
} else {
break;
}
}
max = Math.max(max, count);
}
return max;
}
}
CATALOG
  1. 1. Longest Consecutive Sequence