最长连续序列

复制代码
class Solution 
{
public:
    int longestConsecutive(vector<int>& nums)
     {
        sort(nums.begin(), nums.end());
//  for (int n : nums)
//      cout << n << " ";
//  cout << endl;

 int length = nums.size();
 int max = 0;
 if(length==0||length==1) return length;
 for (int begin = 0; begin < length-1; begin++)
 {
     int l = 1;
     int i = begin;
     for (int j = begin + 1; j < length; j++)
     {
         if ((nums[i] + 1 )== nums[j] )
         {
             //cout << i << " " << j << " " << l << " " << nums[i] << " " << nums[j] << endl;
             l++;
             i++;
            // j++; j已经+了没必要+
         }
           else if (nums[i] == nums[j])
  {
      i++;
  }
         else break;
     }
     if (max < l) max = l;
 }
return max;


    }
};

依旧复杂度问题

复制代码
class Solution 
{
public:
    int longestConsecutive(vector<int>& nums)
     {
        //    if (nums.empty()) return 0; // 处理空数组,避免后续访问越界
        
        // // 用哈希集合去重并加速查找
        // unordered_set<int> numSet(nums.begin(), nums.end());
    int length = nums.size();
        sort(nums.begin(), nums.end());
    // 处理特殊情况
    if (length <= 1) 
    {
        return length;
    }
    int max_len = 1;  // 最长连续序列长度,至少为1
    int current_len = 1;  // 当前连续序列长度
    // 遍历数组,从第二个元素开始
    for (int i = 1; i < length; i++)
     {
        // 如果当前元素与前一个元素相同,不增加长度
        if (nums[i] == nums[i - 1]) 
        {
            continue;
        }
        // 如果当前元素是前一个元素+1,说明连续
        else if (nums[i] == nums[i - 1] + 1) 
        {
            current_len++;
            // 更新最长长度
            if (current_len > max_len) 
            {
                max_len = current_len;
            }
        }
        // 序列中断,重置当前长度
        else 
        {
            current_len = 1;
        }
    }
    return max_len;
     }
 
};

class Solution 
{
public:
    int longestConsecutive(vector<int>& nums)
     {
 sort(nums.begin(), nums.end());
 int length = nums.size();
 int max = 1;
 if (length == 0 || length == 1) return length;
 int begin = 0;
 int l = 1;
         if (length == 0 || length == 1) return length;
         for (int begin = 0; begin < length - 1; begin++)
         {
           
             if (nums[begin] + 1 == nums[begin + 1])
             {
                 l++;
                 if (max < l) max = l;
             }
//之前一直是两个if 会导致else会被错误执行
             else if (nums[begin] == nums[begin + 1]) continue;
                 else
                 {
                     if (max < l) max = l;
                     l = 1;
                 }
             
         }
         return max;
     }
};

更改的重点是将双重循环改为了单循环

老版本是暴力求结果

新版本是将这一个和前一个进行对比,如果相等就再+1,如果刚刚好大于1就长度+1

相关推荐
CoovallyAIHub15 小时前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub16 小时前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub16 小时前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub16 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub16 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞17 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕18 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub19 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone773919 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试