码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 128. 最长连续序列

时间:2020-10-29 10:20:41      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:integer   break   成功   math   代码   inf   没有   数组去重   while   

技术图片

 当我按照官方的思路写出代码,提交后并未通过,查看错误,发现算法错误的将[2147483647,-2147483648]也视为连续的整数了,这是因为我没有考虑到int类型的边界。将代码稍加修改,即成功提交

//哈希表,建议看官方的题解,尤其是演示动画
class Solution {
    public int longestConsecutive(int[] nums) {
        //首先用set把这个整数数组去重
        Set<Integer> set = new HashSet<Integer>();
        for(int num : nums){
            set.add(num);
        }
        
        //维护一个最长连续序列的长度变量
        int maxLongNum = 0;
        //遍历Set
        for(int num : set){
            //如果当前元素为X,找它的前一个元素X-1是否存在在Set中,存在即跳过,因为从X-1的最长序列包含从X开始的最长序列
            if(num == Integer.MIN_VALUE || !set.contains(num - 1)){
                //X-1不存在,即更新目前的连续整数数组的长度,再找X+1,如果可以找到,长度+1
                int curNum = num;
                int curLongNum = 1;
                while(set.contains(curNum + 1)){
                    curNum += 1;
                    if(curNum == Integer.MIN_VALUE) break;
                    curLongNum += 1;
                }
                //没有X+1了,把目前的连续长度和最大的长度比较,更新最大长
                maxLongNum = Math.max(maxLongNum,curLongNum);
            }
        }
        //遍历完后,返回最长长度
        return maxLongNum;
    }
}

 

LeetCode 128. 最长连续序列

标签:integer   break   成功   math   代码   inf   没有   数组去重   while   

原文地址:https://www.cnblogs.com/peanut-zh/p/13892327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!