标签: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; } }
标签:integer break 成功 math 代码 inf 没有 数组去重 while
原文地址:https://www.cnblogs.com/peanut-zh/p/13892327.html