LintCode:124.最长连续序列

题目:

描述

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

说明

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

样例

给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4


分析:

由题可以看出要求时间复杂度为O(n),所以排序不能使用。想到使用hashset数据结构保存数组元素,然后依次遍历数组,对于每一个数组元素,分别找到其下一个元素right和上一个元素left。以上一个元素为例,去hashset中判断是否存在该元素,如果存在,则继续找上一个元素,直到hashset中不存在该元素,返回left。同理判断下一个元素,最后返回right。然后用maxlen保存当前最长长度Max(maxlen,right-left-1),因为right和left是后判断,以100为例,上一个为99,下一个为101,set中都不存在,所以最长长度应该为101-99-1为1.

    public int longestConsecutive(int[] num) {
        // write your code here
        if(num.length==0 || num==null) return 0;
        HashSet set=new HashSet<>();
        for(Integer i:num){
            set.add(i);
        }

        int maxLen=0;
        for(int i=0;i

你可能感兴趣的:(LintCode)