Longest Consecutive Sequence

本文探讨了在处理大数据集时,通过使用容器(如map)优化查找效率的方法。介绍了如何避免传统数组方法的局限性,采用映射元素、判断相邻元素并在访问后标记已访问元素的技术,实现O(n)复杂度的时间查找。强调了在解决大数据问题时,灵活运用容器的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最初的想法是使用一个数组dp[1000]记录每个数字是否出现过,然后从小到大遍历一遍查找,看了测试数据后(数据太大),感觉这种方法不可行。实在想不出来了,参看了discuss,发现他们都是用容器实现的,首先将元素映射过去,然后判断左边和右边元素是否在map中,并且和以前的元素是否连续,这样进行之后,将访问过的元素标记为0.z这种方法是可以达到O(n)的。所以,以后想不出来的时候,试着去用一下容器。

class Solution {
public:
    map<int,int> mp;
    int longestConsecutive(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int i,j;
        for(i=0;i<num.size();i++)
            mp[num[i]]=1;
        int res=0;
        for(i=0;i<num.size();i++){
            int sum=1;
            if(mp.count(num[i])){
                mp[num[i]]=0;
                int left=num[i]-1;
                while(mp.count(left)&&mp[left]!=0){
                    mp[left--]=0;
                    sum++;
                }
                int right=num[i]+1;
                while(mp.count(right)&&mp[right]!=0){
                    mp[right++]=0;
                    sum++;
                }
            }
            if(res<sum)
                res=sum;
        }
        return res;
    }
};


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值