[leetcode]Longest Consecutive Sequence

这道题目一看就去翻答案了,因为以前见过,知道并查集可以用来做分组,但这样的题目真的要并查集么?想想也是HashSet之类就能搞定么。果然是HashMap而不是HashSet。下面这个解法我比较容易理解,刚开始乍看发现对每一个n又要左边遍历右边遍历的,仔细一看对每一段遍历过的数字就标记一下,那么保证每个数字只访问一次,还是O(n)。

public class Solution {
    public int longestConsecutive(int[] num) {
        HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>();
        int max = 0;
        for (int n : num)
        {
            map.put(n, false);
        }
        for (int n: num)
        {
            if (!map.get(n))
            {
                int len1 = getLength(map, n-1, -1);
                int len2 = getLength(map, n+1, 1);
                int len = len1 + len2 + 1;
                if (len > max) max = len;
            }
        }
        return max;
    }
    
    private int getLength(HashMap<Integer, Boolean> map, int n, int step)
    {
        int len = 0;
        while (map.containsKey(n))
        {
            len++;
            map.put(n, true);
            n += step;
        }
        return len;
    }
}

  

posted @ 2013-09-11 23:13  阿牧遥  阅读(246)  评论(0编辑  收藏  举报