LeetCode-128-最长连续序列

本文讲解了解决LeetCode 128题的最长连续序列问题,通过使用哈希表优化查找效率,避免重复遍历,并分享了一段Java代码实现。关键在于利用哈希表快速找到前驱元素,减少不必要的搜索,达到O(n)的时间复杂度。

LeetCode-128-最长连续序列

在这里插入图片描述

思路

首先想到是进行排序,但是这样时间复杂度为O(nlogn),不满足题意的O(n),那么考虑其他办法。将所有数放入哈希表中,然后对每个元素,寻找连续的下一个,更新最大长度。这样会有个问题,

比如[100,4,200,1,3,2]这样一个数组,对于2要遍历,1也要遍历,其实是重复的。因此只需要,寻找当前元素x的是否存在前一个x-1,保证每个需要遍历的元素都是第一个。

代码

class Solution {
    public int longestConsecutive(int[] nums) {
        //放入hash表
       Set<Integer> set=new HashSet<>();
       for(int num:nums){
           set.add(num);
       }


       int maxlen=0;
       //遍历hash表
       for(int num:set){
           //第一个元素
           if(!set.contains(num-1)){
               int curnum=num;
               int curlen=1;
               //进入遍历
               while(set.contains(curnum+1)){
                   curnum++;
                   curlen++;
               }
               //更新最大长度
               maxlen=Math.max(curlen,maxlen);
           }
       }
       return maxlen;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值