128.最大连续序列

本文介绍了一种使用哈希集合(unordered_set)解决最长连续整数序列问题的方法,通过检查每个数的前一个数是否存在来递增序列长度,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

这个题目的最大的难点在于想到淘汰机制,

如果对于x来说,如果x-1也存在这个数组中,那么以x-1为开始的序列一定会比以x开始的序列要长

那么很自然的, 我们使用set进行元素的查找

对于每一个x-1不存在的x,都是一个可能的潜力股,需要接着去寻找 ++x

最后是时间复杂度的判断:

因为只有每一个连续序列的首元素才可能进入内循环,所以每一个元素最多只会进入一次内循环,时间复杂度是O(n)

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int ans=0;
        unordered_set<int> num_set;
        for(int i=0;i<nums.size();i++){
            num_set.insert(nums[i]);
        }
        for(auto tmp : num_set){
            if(num_set.find(tmp - 1) == num_set.end()){
                //没找到  说明这可能是一个隐含的ans  需要测试一下
                int tmpAns=1;
                while(num_set.find(++tmp) != num_set.end()){
                    tmpAns++;
                }
                if(tmpAns > ans){
                    ans = tmpAns;
                }
            }
            //找到了  跳过当前的i  因为那个减一的序列长度一定更长
                
            
        }

        return ans;
    }
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值