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

最长连续序列,leetCode热题100,C++实现

题目来源:leetCode

128. 最长连续序列 - 力扣(LeetCode)

解法

class Solution {
public:int longestConsecutive(vector<int>& nums) {if (nums.empty()) return 0;unordered_set<int> numSet(nums.begin(), nums.end());int maxLength = 0;for (int num : numSet) {// 只有当当前数字是序列的起点时才检查if (numSet.find(num - 1) == numSet.end()) {int currentNum = num;int currentLength = 1;// 查找连续序列while (numSet.find(currentNum + 1) != numSet.end()) {currentNum++;currentLength++;}maxLength = max(maxLength, currentLength);}}return maxLength;}
};

前面是判空和创建,我们直接来看重点for循环,我们遍历set,然后查找起点

什么是起点?假设数组里为{1, 2, 3, 4, 100, 200},那么1就是起点,因为1的前面没有数字,比如我查找0,就是不存在,所以1是起点,同理100和200也是起点

numSet.find(num - 1) == numSet.end()

是在set里查找key,如果找到则返回该元素迭代器,如果没找到则返回numSet.end()

numSet.end()是什么?

  • 它不是指向最后一个元素,而是指向最后一个元素之后的位置

  • 可以理解为"结束标志"或"无效位置"

  • 类似于字符串的'\0'结束符

可以理解为如果没找到就会返回numSet.end()

进入if语句里面,首先是创建两个变量,一个是长度,一个用于保存当前数字,然后我们看while

while用于检测下一个数字是否存在

如果存在则当前数字+1,长度+1,最后再比较长度即可

下面我简单说一下整体逻辑,方便理解

首先是判断数组为空,然后是创建set,接着是for循环遍历set,然后是for里面循环逻辑,首先看看当前数字的前一个数是否存在,比如当前数字为2,就查看1是否在set里存在,如果存在则不是起点,跳过,如果不存在,说明是起点,进入if语句,创建长度变量和num,然后开始进行while循环,如果当前数字的下一位存在,则继续循环,比如当前数字为2,查找3是否存在,如果存在,则num++,num变成3,然后长度也同样+1,接着判断maxlength,最后然后maxlength

时间复杂度也是符合,每个数字最多被访问2次,也就是O(2N),符合O(N)

http://www.dtcms.com/a/355082.html

相关文章:

  • 解读 AUTOSAR AP R24-11 Manifest 规范 —— 从部署到安全的全流程支撑
  • 可拖拽指令
  • Xray与XPOC工具对比分析
  • 让企业资产管理高效透明——深度解析固定资产管理系统的功能、优势与价值
  • HBase Compaction HFile 可见性和并发安全性分析
  • Docker-compose离线安装
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • [ICCV25]TRACE:用3D高斯直接学习物理参数,让AI“推演”未来场景
  • 微硕WINSOK高性能MOS管WSF80P04,助力充电宝效能与安全升级
  • 在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试
  • 舆情监测系统有哪些功能
  • 省市区三级联动选择器-组件
  • C++ 方向 Web 自动化测试实战博客系统思路
  • mac系统本地部署Dify步骤梳理
  • 资产与设备管理数字化转型实践:企业降本增效的新引擎
  • 图书管理系统练习项目源码-前后端分离-【Java版】
  • Linux /proc/pid 探索
  • 【全开源】云贝餐饮V3独立版系统 v1.8.7+API接口开发文档+搭建教程
  • 从 Dockerfile 到 Kubernetes:现代化 PHP 应用配置管理进阶指南
  • 打造旅游实训新场景:旅游管理虚拟仿真实训室的运营与教学落地
  • 旅游管理新阵地:虚拟仿真实训室的功能设计与教学应用
  • Python 实现冒泡排序:从原理到代码
  • java去图片水印的方法
  • Redis 连接数爆炸:连接池配置错误踩坑记录
  • Runway Gen-2 深度技术解析:AI视频生成的范式变革
  • Bscan Bonding Chain
  • 使用llamafactory对模型进行微调
  • 软考-系统架构设计师 决策支持系统(DSS)详细讲解
  • 滤波算法作用
  • Redis高性能数据库讲解与实战指南