128. 最长连续序列

package leetcode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class demo_128 {
    public int longestConsecutive(int[] nums) {
        //先排序
        Arrays.sort(nums);
        List<Integer> list=new ArrayList<Integer>();
        //排除空的数组
        if(nums.length==0) {return 0;}
        int len=1;
        int maxlen=1;
        list.add(nums[0]);
        int i=1;
        while(i<nums.length) {
            //跳过所有相同的数组
            while(i<nums.length&&nums[i]==nums[i-1]) {
                i=i+1;
            }
            if(i<nums.length) {
                //将数组所有不同的数放在List中
                list.add(nums[i]);
                //计算长度
                if(list.get(list.size()-1)-list.get(list.size()-2)==1) {
                    len=len+1;
                }
                else {
                    //如果当前长度大于最长长度则替换
                    if(len>maxlen) {
                        maxlen=len;
                    }
                    len=1;
                }
            }
            i=i+1;
        }
        //如果最后一个数也符合,但maxlen不会被更新,所以补上
        if(len>maxlen) {maxlen=len;}
        System.out.println(maxlen);
        return maxlen;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_128 d128= new demo_128();
        int[] nums= {9,1,-3,2,4,8,3,-1,6,-2,-4,7};
        d128.longestConsecutive(nums);
    }

}

 O(n)的解决方法

    public int longestConsecutive(int[] nums) {
        if(nums.length==0) {return 0;}
        int maxlen=1;
        int currentnum;
        int len;
        HashSet<Integer> hs=new HashSet<Integer>();
        //用set集合删除重复的元素
        for(int num:nums) {
            hs.add(num);
        }
        for(int num:hs) {
            //找出所有可能结果的起始元素
            if(!hs.contains(num-1)) {
                currentnum=num;
                len=1;
                //不断找出当前元素的下一个元素
                while(hs.contains(currentnum+1)) {
                    currentnum=currentnum+1;
                    len=len+1;
                }
                if(len>maxlen) {
                    maxlen=len;
                }
            }
        }
        System.out.println(maxlen);
        return maxlen;
    }

 

posted on 2021-07-09 16:36  一仟零一夜丶  阅读(44)  评论(0)    收藏  举报