[Leetcode] 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.

Solution:

排序的话至少要O(nlgn) 的复杂度。O(n)的复杂度,目前只找到了使用hash来解决的方案,add, remove, contains 等方法的复杂度都是 O(1),因此两次遍历的操作复杂度为 O(n)。

public class Solution {
    public int longestConsecutive(int[] num) {
        if(num==null||num.length==0)
            return 0;
        HashSet<Integer> hs=new HashSet<Integer>();
        for(int i:num){
            hs.add(i);
        }
        int max=1;
        for(int e:num){
            int left=e-1;
            int right=e+1;
            int temp=1;
            while(hs.contains(left)){
                hs.remove(left);   //其实就相当于把num数组给group掉,每个元素只被走了一遍
                temp++;
                left--;
            }
            while(hs.contains(right)){
                hs.remove(right);  //同上
                right++;
                temp++;
            }
            max=Math.max(max, temp);
        }
        return max;
    }
}
原文地址:https://www.cnblogs.com/Phoebe815/p/4137099.html