LeetCode最长连续序列问题

版权声明:LiuK°版权所有 https://blog.csdn.net/weixin_43401946/article/details/83040848

LeetCode-128.最长连续序列


)

最长连续序列

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

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

示例:

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

分析

在拿到数组时首先应该去重,再进行排序,最后统计最长序列;

由于我使用的是Java语言,去重我首选的是set集合,逐个存入再取出,需要注意的是因为考虑到数组长度改变,所以需要创建一个新的数组(int[] arrs=new int[set.size()])存储从set集合中取出的去完重的数;

拿到新数组后,使用Arrays.sort(arrs);进行排序;

最后进行最长序列的统计:
首先需要排除空数组的情况,遇空直接return 0;
需要注意哪怕数组中只有一个数,最长序列也是1,所以最长序列统计应该从1开始:int longest=1;//用来记录最长序列
需要一个计数器:int count=1;来计数,知道序列断了才开始从新计数,从新计数前应该将count与longest进行比较,始longest始终保持最大的数值。
代码片.

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length==0){
            //排除空数组
            return 0;
        }else{
            //去重
            Set<Integer> set=new HashSet<>();
            for (int num : nums) {
                set.add(num);
            }
            int[] arrs=new int[set.size()];
            int k=0;//计数
            for (Integer integer : set) {
                arrs[k]=integer;
                k++;
            }

            Arrays.sort(arrs);

            int longest=1;
            int count=1;
            int value=arrs[0];
            for(int i=1;i<arrs.length;i++){
                if(value+1==arrs[i]){
                    count++;
                }else{
                    if(count>longest){
                        longest=count;

                    }
                    count=1;
                }
                if(count>longest){
                    longest=count;
                }
                value=arrs[i];
            }
            return longest;
        }
        
    }
}

作者:LiuK版权所有转载需注明出处

猜你喜欢

转载自blog.csdn.net/weixin_43401946/article/details/83040848