[leetcode-128] 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

如果不要求算法的时间复杂度为 O(n),排序后遍历即可。沒想出怎么解,看了思路后AC如下,主要是用到Hash映射
public class LongestConsecutiveSequence {
    public int longestConsecutive(int[] num) {
        //也可以用一个HashMap,Set是一个只包含键值的特殊Map
        Set<Integer> set = new HashSet<>();
        for(int n : num) {
            set.add(n);
        }
        int max = 1;
        for (int n : num) {
            if (set.contains(n)) {
                int cur = n;
                int temp = 1;
                while(set.contains(--cur)) {
                    temp = temp + 1;
                    set.remove(n);
                }
                cur = n;
                while(set.contains(++cur)) {
                    temp = temp + 1;
                    set.remove(n);
                }
                if (temp>max) {
                    max = temp;
                }
            }
        }
        return max;
    }
}
 

猜你喜欢

转载自www.cnblogs.com/twoheads/p/10572461.html