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

LeetCode128.最长连续序列

此题为大厂面试高频手撕题,希望大家能重视这道题。

题目大意

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

思路分析

示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4

一些不是O(n)的方法就不说了。
那么对于连续的数字来说,重复的元素不是我们关心的,第一步可以去重。
要寻找一条连续的序列,还是免不了遍历一遍数据,那怎么减少遍历的次数那?答案就是我们可以从连续序列的第一个值开始。然后接着求num+1, num+2, num+3num+n,所求的最大的n就是我们相要的结果n+1。

代码示例

Java版本

class Solution {public int longestConsecutive(int[] nums) {if(nums.length == 0) return 0;Set<Integer> set = new HashSet<>();for(Integer i: nums){set.add(i);}int max = 0;for (int num : nums) {if (!set.contains(num-1)){int inum = num;int index = 1;while(set.contains(inum+1)){inum++;index++;set.remove(inum);}max = Math.max(max,index);}}return max;}
}

Python版本

class Solution:def longestConsecutive(self, nums: List[int]) -> int:nums_set = set(nums)max_len = 0for num in nums:if (num-1) not in nums_set:n = numindex = 1while (n+1) in nums_set:index += 1n += 1nums_set.remove(n)max_len = max(max_len, index)return max_len

上面虽然是有forwhile但是因为有判断(num-1) not in nums_set,所以说for循环中只会寻找连续序列中的第一个值,while中寻找后面的连续序列,本质上时间复杂度还是O(n)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • select模型实现TCP聊天室
  • 聚星文社推文软件
  • Qt/QML学习-ScrollView
  • 【TS】函数重载的作用
  • 超简单亿图图示安装教程/快速入门指南及快捷键大全
  • C++拾趣——使用VSCode跨平台调试CMake编译的C/C++项目
  • 微信小程序实例代码解读
  • 数据结构--图(笔记)
  • 滑块缺口研究实例(C#颜色滑块缺口计算)
  • 【STM32 Blue Pill编程】-读取数字引脚输入
  • 回顾前面刷过的算法(6)
  • web前端之vue+element+select实现多选、两个数组排序、保持源数据、查找索引、过滤、克隆、复制、findIndex、filter
  • ansible搭建+ansible常用模块
  • Python - sqlparse 解析库的基础使用
  • Spring Boot 集成 Elasticsearch 时,是使用 Java API 还是原生的 Elasticsearch API?
  • 【comparator, comparable】小总结
  • 4. 路由到控制器 - Laravel从零开始教程
  • ES6核心特性
  • es6要点
  • Iterator 和 for...of 循环
  • java 多线程基础, 我觉得还是有必要看看的
  • JWT究竟是什么呢?
  • k8s如何管理Pod
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux后台研发超实用命令总结
  • Mysql优化
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • python docx文档转html页面
  • TypeScript迭代器
  • webpack+react项目初体验——记录我的webpack环境配置
  • Web设计流程优化:网页效果图设计新思路
  • Xmanager 远程桌面 CentOS 7
  • 编写符合Python风格的对象
  • 给新手的新浪微博 SDK 集成教程【一】
  • 码农张的Bug人生 - 见面之礼
  • 前端之Sass/Scss实战笔记
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 设计模式走一遍---观察者模式
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一些css基础学习笔记
  • Java数据解析之JSON
  • 第二十章:异步和文件I/O.(二十三)
  • #162 (Div. 2)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (k8s)Kubernetes本地存储接入
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (强烈推荐)移动端音视频从零到上手(上)
  • (四)模仿学习-完成后台管理页面查询
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Google的Objective-C编码规范
  • (轉貼) UML中文FAQ (OO) (UML)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程