LeetCode题练习与总结:最长连续序列--128

一、题目描述

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

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

示例 1:

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

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

二、解题思路

要设计一个时间复杂度为O(n)的算法,我们可以使用哈希集合(HashSet)来存储数组中的所有数字。然后,我们可以遍历数组中的每个数字,对于每个数字,我们检查其是否为某个连续序列的最小数字。如果是,我们就更新最长连续序列的长度。

算法步骤如下:

  1. 将数组中的所有数字添加到哈希集合中。
  2. 遍历数组中的每个数字,对于每个数字,如果其在哈希集合中且其前一个数字不在哈希集合中,那么这个数字就是某个连续序列的最小数字。
  3. 对于每个这样的最小数字,我们可以计算以其为起点的连续序列的长度,并更新最长连续序列的长度。

三、具体代码

import java.util.HashSet;
import java.util.Set;public class Solution {public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) {return 0;}Set<Integer> numSet = new HashSet<>();for (int num : nums) {numSet.add(num);}int longestStreak = 0;for (int num : nums) {if (!numSet.contains(num - 1)) {int currentNum = num;int currentStreak = 1;while (numSet.contains(currentNum + 1)) {currentNum++;currentStreak++;}longestStreak = Math.max(longestStreak, currentStreak);}}return longestStreak;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 将数组中的所有数字添加到哈希集合中:这一步的时间复杂度是O(n),因为我们需要遍历数组中的每个数字一次,并将它们添加到哈希集合中。哈希集合的添加操作通常是O(1)的时间复杂度。
  • 遍历数组中的每个数字,并计算以它们为起点的连续序列的长度:这一步的时间复杂度也是O(n),因为我们需要遍历数组中的每个数字一次。对于每个数字,我们可能会计算以其为起点的连续序列的长度,这个计算过程在最坏情况下会遍历整个数组,但是由于哈希集合的存在,每个数字只会被计算一次。因此,这一步的整体时间复杂度仍然是O(n)。
  • 综上所述,整个算法的时间复杂度是O(n)。
2. 空间复杂度
  • 哈希集合:我们需要一个哈希集合来存储数组中的所有数字,因此空间复杂度是O(n),其中n是数组中数字的数量。
  • 综上所述,整个算法的空间复杂度是O(n)。

五、总结知识点

  1. 哈希集合(HashSet):用于存储数组中的所有数字,以便快速判断一个数字是否存在于数组中。哈希集合的特点是添加和查找操作的平均时间复杂度为O(1)。

  2. 数组遍历:使用for-each循环遍历数组中的每个元素。

  3. 条件语句:使用if语句来检查数字是否为某个连续序列的最小数字。

  4. 循环结构:使用while循环来找到以某个数字为起点的最长连续序列。

  5. 数学运算:使用加减法来生成连续序列中的下一个数字,并使用Math.max函数来更新最长连续序列的长度。

  6. 函数定义:定义了一个名为longestConsecutive的公共方法,该方法接受一个整数数组作为参数,并返回一个整数作为结果。

  7. 异常处理:检查输入数组是否为null或长度为0,如果是,则直接返回0,这是一种简单的异常处理方式。

  8. 变量声明和赋值:声明了多个变量来存储当前的数字、当前的连续序列长度和最长的连续序列长度。

  9. 算法设计:整个代码的核心是设计了一个时间复杂度为O(n)的算法来找到最长的连续序列,这涉及到对问题的分析和解决方案的设计。

  10. 代码结构:代码遵循了良好的结构,先处理特殊情况,然后是主要逻辑,最后返回结果。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBootWeb 篇-入门了解 Spring Cache 、Spring Task 与 WebSocket 框架

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Spring Cache 概述 1.1 Spring Cache 具体使用 1.1.1 引入依赖 1.1.2 Spring Cache 相关注解的介绍 2.0 Spring Task 概述 2.1 cron 表达式 2.2 Spring Task 使用…

基于微信公众号开发h5的前端流程

1.首先公众号进行配置&#xff0c;必须要https域名 还有个txt文件&#xff0c;有弹框提示需要下载放在服务器上 前端处理code的代码封装 // 微信公众号授权 export function wxAuthorize(calback) {// 非静默授权&#xff0c;第一次有弹框 这里的回调页面就是放在服务器上微信…

c语言连接两个字符串

在C语言中&#xff0c;连接两个字符串可以使用 strcat 函数。这个函数将一个字符串复制到另一个字符串的末尾。使用 strcat 函数之前&#xff0c;需要确保目标字符串有足够的空间来容纳源字符串&#xff0c;否则可能会导致缓冲区溢出。 下面是一个使用 strcat 函数连接两个字符…

外贸推广渠道有哪些

外贸推广渠道多种多样&#xff0c;每一种都有其特定的优势和适用场景。以下是一些常见的外贸推广渠道&#xff0c;它们被广泛用于吸引国际客户、增加品牌曝光度和促进销售。 外贸B2B平台推广&#xff1a; 阿里巴巴国际站&#xff1a;作为全球知名的B2B平台&#xff0c;汇聚了大…

MFC工控项目实例之五CFile类读写系统参数

承接专栏《MFC工控项目实例之四在调试目录下创建指定文件夹》 实时保存输入的iPlotX坐标轴最小值、最大值到CFG.PAR文件&#xff0c;打开界面从CFG.PAR文件中实时读取保存的最小值、最大值在编辑框中显示。 1、SEAL_PRESSURE.h中添加代码 class CSEAL_PRESSUREApp : public CW…

我主编的电子技术实验手册(07)——串联电路

本专栏是笔者主编教材&#xff08;图0所示&#xff09;的电子版&#xff0c;依托简易的元器件和仪表安排了30多个实验&#xff0c;主要面向经费不太充足的中高职院校。每个实验都安排了必不可少的【预习知识】&#xff0c;精心设计的【实验步骤】&#xff0c;全面丰富的【思考习…

大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境&#xff1a;apachePHP7.3MySQL5.7 源码免费下载地址抄笔记 (chaobiji.cn)

Web前端网页滚动效果:深度解析与创意实践

Web前端网页滚动效果&#xff1a;深度解析与创意实践 在Web前端设计中&#xff0c;滚动效果作为一种交互方式&#xff0c;不仅影响着用户体验&#xff0c;更在某种程度上定义了网页的视觉风格和动态特性。本文将深入剖析Web前端网页滚动效果的四个方面、五个方面、六个方面和七…

装饰器模式构建IO流体系

装饰器模式简介 装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对现有类的包装和装饰&#xff0c;使新的类具有更强的功能。 装饰器模式 class Iphone {private String name;public Iphone(String name){this.name name;}public void show(){System.out.pri…

C++前期概念(重)

目录 命名空间 命名空间定义 1. 正常的命名空间定义 2. 命名空间可以嵌套 3.头文件中的合并 命名空间使用 命名空间的使用有三种方式&#xff1a; 1:加命名空间名称及作用域限定符&#xff08;::&#xff09; 2:用using将命名空间中某个成员引入 3:使用using namespa…

MySql 数据库、表常用语句

数据库 查看当前所有数据库 mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | --------------------创建一个新数据库 创建一个…

代码随想录算法训练营第六十二天 | 739.每日温度、496.下一个更大元素 I、503.下一个更大元素II

739.每日温度 文字讲解&#xff1a;代码随想录 视频讲解&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度_哔哩哔哩_bilibili 解题思路 思路一&#xff1a;暴力双循环 O&#xff08;n^2&#xff09; 思路二&#xff1a;单…

ICML24麻省理工提出使用更少的条件独立性测试来发现因果关系新方法

【摘要】众多科学领域的核心问题围绕着理解因果关系这一基本问题。然而,大多数基于约束的因果发现算法,包括广受欢迎的PC算法,通常会进行指数级数量的条件独立性(CI)测试,在各种应用中造成局限。为解决这一问题,我们的工作重点是表征在减少CI测试数量的情况下,可以了解潜在因果…

js 数组有哪些方法

JavaScript 数组提供了许多内置方法来操作和处理数组。以下是一些常用的数组方法&#xff1a; 创建和操作数组的方法 Array.from()&#xff1a;从类数组对象或可迭代对象创建一个新的数组实例。 let arr Array.from(hello); // [h, e, l, l, o]Array.isArray()&#xff1a;判…

Explain Python Machine Learning Models with SHAP Library

Explain Python Machine Learning Models with SHAP Library – Minimatech &#xff08;能翻墙直接看原文&#xff09; Explain Python Machine Learning Models with SHAP Library 11 September 2021Muhammad FawiMachine Learning Using SHapley Additive exPlainations …

用户管理相关命令(修改sudoer文件添加用户权限)visudo: /etc/sudoers: 权限不够

1.useradd <用户名>&#xff1a;用来新建一个用户&#xff08;-m&#xff1a;创建用户的家目录 -s&#xff1a;指定/bin/bash&#xff09; 2.userdel <用户名>&#xff1a;删除一个用户&#xff0c;还会存在家目录&#xff08;-r&#xff1a;删除用户的同时&…

jeecg在线表单开发模式保存表时报The jdbcUrl is Null, Cannot read database type

报错信息如图 原因分析 使用jeecg框架 数据库使用的是DM数据库&#xff0c;在JeecgSystemApplication中&#xff0c;使用了注解过滤DruidDataSourceAutoConfigure&#xff0c;配置文件使用的是多数据源的方式 会出现这种情况 源码分析 getOnlineDataBaseConfig方法的dataBa…

unity text根据文本内容自动设置高度

我们经常会遇到需要根据文字数量动态修改文本框高度的需求&#xff0c;我们可以使用文本的行数*每行的高度来计算文本框的高度&#xff0c;伪代码如下&#xff1a; int oneLineHight 50;// 每行的像素高度 private void ResetTextHight(string str) {//设置文字内容ShowText.…

Gson的常见用法

一引入依赖 <!-- json解析的工具包 --> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> <!-- 主要为了代码简洁和日志打印 --> <…

怎么找抖音视频素材?在哪里找爆款热门的素材呢?

在短视频时代&#xff0c;拍摄和分享短视频已经成为一种潮流。但是&#xff0c;许多人都会面临一个问题&#xff0c;那就是——视频素材从哪里来&#xff1f;今天&#xff0c;我将为大家介绍几个优质的网站&#xff0c;让你的视频素材不再愁。 蛙学府&#xff1a;https://www.…