LeetCode.128. 最长连续序列

50 阅读1分钟

题目


搜狗截图20250225204114.png

思路


  • 使用 存储计数 的方式(可以用计数数组、map。但可能输入负数,因此使用map)
  • 每次对目标计数,基于前一个数(cur-1)的计数累加

唯一不好处理的地方在于:输入序列可能不是连续增大的,这就导致cur的计数无法基于前面数的计数值累加。

int longestConsecutive(vector<int>& v) // 3 2 1
{
        using namespace std;
        map<int,int> mp;
        int ret = 0;
        //最巧妙的地方在于:用一次for先把数据缓存到map,利用C++ map对key的自动排序特性,可以很好地处理非连续递增输入的问题;
        //当然,也可以先排序,然后遍历,map边插入边累计数
        for(const auto& cur:v) 
        {
            mp[cur] = 1;
        }
        for(auto pr:mp)
        {
            auto k = pr.first;
            mp[k] = mp[k-1] + 1;
            ret = max(ret,mp[k]);
        }
        return ret;
    }