Link: https://oj.leetcode.com/problems/longest-consecutive-sequence/
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)的有序问题,只能增加空间复杂度,用hashset/hashtable.
但我不知道如何构造这个hashtable。key和value是啥?
答案:hashset即可,不需要hashtable。思路来源于,手动做这道题,看到了4,也想到要去找3和5。
Time: O(n), Space: O(n)
public class Solution {
public int longestConsecutive(int[] num) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < num.length; i++){
set.add(num[i]);
}
int max = 1;
while(!set.isEmpty()){
Iterator it = set.iterator();
int item = (Integer)it.next();
int count = 1;
set.remove(item);
int left = item - 1;
while(set.contains(left)){
count ++;
set.remove(left);
left--;
}
int right = item + 1;
while(set.contains(right)){
count ++;
set.remove(right);
right++;
}
max = Math.max(max, count);
}
return max;
}
}
Ref:
http://blog.csdn.net/linhuanmars/article/details/22964467
http://blog.csdn.net/fightforyourdream/article/details/15024861