当前位置: 首页 > article >正文

Leetcode128. 最长连续序列(HOT100)

链接

第一次错误提交:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int n = nums.size();
        int res = 0;
        sort(nums.begin(),nums.end());//第一次错误写作:sort(nums,nums+n);nums是std::vector<int>类型,不能与int相加,这不是普通数组,不能这样写
        for(int i = 0;i<n;){
            int j = i+1;
            int count = 1;
            while(j<n){
                if(nums[j]==nums[j-1]){
                    ++j;
                }
                else if(nums[j]==nums[j-1]+1){
                    count++;
                    j++;
                }
                else{ 
                    res = max(res,count);
                    break;
                }
            }                   

            i = j;
        }
        return res;
    }
};

错误原因是:我把res的更新放在了while里边,这存在一个问题:只有出现 1 3这种差距超过1时res才会更新,那么如果数组长这样:1 2 3 4 5,我就永远不会更新res了,res永远是0,当j 走过n时跳出去......同理,i = j; 这一句也不应该放在里边,否则i 将很难更新,导致超时。 

第二次正确提交:
 

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int n = nums.size();
        int res = 0;
        sort(nums.begin(),nums.end());
        for(int i = 0;i<n;){
            int j = i+1;
            int count = 1;
            while(j<n){
                if(nums[j]==nums[j-1]){
                    ++j;
                }
                else if(nums[j]==nums[j-1]+1){
                    count++;
                    j++;
                }
                else{ 
                    break;
                }
            }                   
            res = max(res,count);
            i = j;
        }
        return res;
    }
};

使用了unordered_set的方法,正确提交,因为重复元素对于本题没有意义,所以去重刚好满足要求。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> s;
        int res =  0;
        for(const auto&e:nums){
            s.insert(e);
        }
        for(const auto& e:nums){
            if(s.count(e)&&!s.count(e-1)){
                s.erase(e);
                int u = e+1;
                while(s.count(u)){
                    s.erase(u);
                    ++u;
                }
                res = max(res,u-e);
            }
        }
        return res;
    }
};


http://www.kler.cn/a/405922.html

相关文章:

  • 笔记记录 k8s-RBAC
  • [C++]:C++11(三)
  • HTML5拖拽API学习 托拽排序和可托拽课程表
  • Centos使用docker搭建Graylog日志平台
  • STM32单片机ADC数模转换器
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-conv.py
  • Pytest-Bdd-Playwright 系列教程(12):步骤参数 parsers参数解析
  • ArcMap 处理栅格数据的分辨率功能操作
  • 利用D3.js实现数据可视化的简单示例
  • 实现了两种不同的图像处理和物体检测方法
  • 2411rust,实现特征
  • 云计算面试题之六.运维架构篇
  • Java爬虫淘宝详情接口深度解析
  • C# .NET环境下调用ONNX格式YOLOV8模型问题总结
  • 【山大909算法题】2014-T1
  • golang面试题
  • 【YOLOv11改进[Conv]】引入GSConv和VoVGSCSPC模块 + 模型轻量化和保持精度
  • 【数据结构】链表(leetcode)
  • 11.22糖丸比赛题解
  • H.265流媒体播放器EasyPlayer.js网页全终端安防视频流媒体播放器可以播放本地视频吗
  • Linux空口抓包方法
  • 数字图像处理(2):Verilog基础语法
  • 【React】React Router:深入理解前端路由的工作原理
  • 常用的消息中间件
  • Python编程艺术:优雅与实用的完美平衡(推导式)
  • 《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》