力扣128.最长连续序列

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer>set=new HashSet<>();
        for(int num:nums){
            set.add(num);
        }
        int ans=0;
        for(int x:set){
            if(set.contains(x-1)){
                continue;
            }
            int y=x+1;
            while(set.contains(y)){
                y++;
            }
            ans=Math.max(ans,y-x);
            if(ans*2>=set.size()){
                break;
            }
        }
        return ans;
    }
}
  • 要去遍历哈希表而不是原数组,因为原数组会有很多重复的,导致多次计算
  • 不使用sort排序,因为使用了就是O(logN)复杂度,那么是通过一个特判:x-1是否在哈希表中,如果存在就不用这个作为起初的判断,也算是变相的去找到一个连续序列的最开始的那个元素
  • 因为在Set里面元素唯一,那么当我们检测到ans*2>=set.size(),那么就不可能再有另外一个连续的序列长度能比这个更长,所以直接结束循环,避免多余的查找
posted @ 2025-12-28 10:50  Huangyien  阅读(2)  评论(0)    收藏  举报