[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;

    }

}

  

你可能感兴趣的:(LeetCode)