Python面试宝典第11题:最长连续序列

news2024/11/13 8:51:35

题目

        给定一个未排序的整数数组 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

排序法

        排序法在最坏情况下的时间复杂度为O(nlogn),不满足本题时间复杂度为O(n)的要求。但它提供了一个不同的解题视角,还是值得我们学习一下的。使用排序法求解本题的主要步骤如下。

        1、首先,将输入数组nums进行排序。这一步的目的是使得连续的数字相邻,便于后续遍历查找连续序列。

        2、对排序后的数组进行遍历,并初始化两个变量。其中,current_streak用于记录当前连续序列的长度,longest_streak用于记录遇到的最长连续序列的长度。

        3、在遍历过程中,比较当前元素与前一个元素的关系。如果当前元素正好比前一个元素大1,则说明它们属于同一个连续序列,此时current_streak加1。否则,说明遇到了新的序列起点,此时更新longest_streak(如果current_streak大于longest_streak),并将current_streak重置为1。

        注意:需要对数组中存在相同元素的情况进行额外处理,以避免重复元素导致的误判。

        根据上面的算法步骤,我们可以得出下面的示例代码。

def get_longest_consecutive_by_sort(nums):
    if not nums:
        return 0
    
    nums.sort()
    longest_streak = 1
    current_streak = 1
    for i in range(1, len(nums)):
        # 避免重复元素导致的误判
        if nums[i] != nums[i-1]:
            if nums[i] == nums[i-1] + 1:
                current_streak += 1
            else:
                longest_streak = max(longest_streak, current_streak)
                current_streak = 1
    
    return max(longest_streak, current_streak)

print(get_longest_consecutive_by_sort([100, 4, 200, 1, 3, 2]))
print(get_longest_consecutive_by_sort([0, 3, 7, 2, 5, 8, 4, 6, 0, 1]))

哈希法

        使用哈希法的基本思想如下:首先,将所有数组中的元素添加到哈希集合中,以便快速查询一个数字是否已存在。然后,遍历数组中的每个元素,对于每个元素,检查它是否是某个连续序列的起始点(即检查num - 1不在哈希集合中)。如果是起始点,则尝试向后扩展序列,同时更新最长序列长度。为了避免重复计算,每当我们确定了一个数字属于某个连续序列时,就将其从哈希集合中移除。使用哈希法求解本题的主要步骤如下。

        1、初始化。创建一个空的哈希集合num_set,用来存储数组中的所有数字。

        2、填充哈希集合。遍历数组nums,将所有元素添加到哈希集合num_set中。

        3、遍历并检查连续性。再次遍历数组nums,对于每个元素,检查它是否能作为连续序列的起点,即检查 num - 1 是否不在 num_set 中。

        4、扩展序列并更新长度。如果找到了一个起点,就尝试通过不断检查 num + 1 是否在 num_set 中来扩展序列,并相应地更新最长序列长度。

        5、移除已访问元素。在扩展序列的过程中,将访问过的数字从 num_set 中移除,以避免之后的重复计算。

        6、返回找到的最长连续序列的长度。

        根据上面的算法步骤,我们可以得出下面的示例代码。

def get_longest_consecutive_by_hash(nums):
    if not nums:
        return 0

    num_set = set(nums)
    longest_streak = 0
    
    for num in num_set:
        if num - 1 not in num_set:
            current_num = num
            current_streak = 1
            
            while current_num + 1 in num_set:
                current_num += 1
                current_streak += 1
            
            longest_streak = max(longest_streak, current_streak)
    
    return longest_streak

print(get_longest_consecutive_by_hash([100, 4, 200, 1, 3, 2]))
print(get_longest_consecutive_by_hash([0, 3, 7, 2, 5, 8, 4, 6, 0, 1]))

总结

        使用哈希法求解本题时,每个元素仅被访问两次:一次加入哈希集合,另一次作为序列起点检查。遍历和序列扩展操作均在常数时间内完成,故总的时间复杂度为O(n),满足本题的要求。另外,哈希法需要额外的空间来存储哈希集合。最坏情况下,数组中的所有元素都是唯一的,因此哈希集合将存储n个元素,空间复杂度为O(n)。

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

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

相关文章

前端JS特效第30集:jQuery焦点图插件edslider

jQuery焦点图插件edslider&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatib…

台湾精锐APEX伺服行星减速机发热原因及解决方案

在实际运行过程中台湾精锐APEX伺服行星减速机常常会遇到发热的问题&#xff0c;这不仅影响减速机的正常运转&#xff0c;还可能缩短其使用寿命&#xff0c;甚至引发安全事故。因此&#xff0c;了解APEX伺服行星减速机发热的原因及相应的解决方案&#xff0c;对于保障生产线的稳…

C语言——基础框架、变量、运算符

基础框架&#xff1a; #include<stdio.h> //编译预处理指令int main() //程序的入口主函数main { //程序&#xff08;函数、功能&#xff09;结束标志return 0; //程序退出前返回给调用者&#xff08;操作系统&#xff09;的值…

MySQL实战45讲学习笔记(持续更新ing……)

文章目录 一、基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f;概览连接器查询缓存分析器优化器执行器 二、日志系统&#xff1a;一条SQL更新语句是如何执行的&#xff1f;redo logbinlog两阶段提交 一、基础架构&#xff1a;一条SQL查询语句是如何执行的&#xf…

深度学习DeepLearning多元线性回归 学习笔记

文章目录 多维特征变量与术语公式多元线性回归正规方程法Mean normalizationZ-score normalization设置合适的学习率Feature engineering 多维特征 变量与术语 列属性xj属性数n x ⃗ \vec{x} x (i)行向量某个值 x ⃗ j i \vec{x}_j^i x ji​上行下列均值μ标准化标准差σsigm…

无线速度传感器

对高中物理实验中的速度测量方法进行改进&#xff0c;利用安装在小车上的无线光电门来测量小车运动过程中的速度&#xff0c;即满足了精度的要求&#xff0c;又可以研究物体的运动过程。无线光电门和数据接收器间采用蓝牙无线传输的方式&#xff0c;电脑端的软件使用Flash来制作…

vant-app中加的custom-class为啥审查元素时看不到自定义类名

如下图&#xff1a; 我们发现在左侧审查元素时确实看不到&#xff0c;但是在右侧是可以看到&#xff0c;而且样式是生效的。 是不是微信开发者工具的bug?

SQL基础-DQL 小结

SQL基础-DQL 小结 学习目标&#xff1a;学习内容&#xff1a;SELECTFROMWHEREGROUP BYHAVINGORDER BY运算符ASC 和 DESC 总结 学习目标&#xff1a; 1.理解DQL&#xff08;Data Query Language&#xff09;的基本概念和作用。 2.掌握SQL查询的基本语法结构&#xff0c;包括SEL…

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日&#xff0c;欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼&#xff0c;指控其透明度不足&#xff0c;侵犯了欧盟公民的数据访问权。据指控&#xff0c;Xandr的行为涉嫌违反《通用数据保护条例》&#xff08;GFPR&#xff09;&#xff0c;因其处理信息并创建用于微目…

C#开发:VS2022中配置TFS(Team Foundation Server)和使用

第一步&#xff0c;点出团队资源管理器 第二步&#xff0c;输入服务器地址 第三步&#xff0c;输入配置地址和账密&#xff08;问管理员&#xff09; 输入配置地址&#xff1a;$/xxxx 输入工作区地址&#xff1a;本地随便一个路径 第四步&#xff0c;获取最新代码 第五步&#…

空调元件的介绍

保险丝管 1、保险丝管在电脑板上用FC1.2&#xff08;FUSE&#xff09;表示&#xff0c;主要用于起过电流保护。 2、故障现象&#xff1a;整机无电不工作 3、检测方法&#xff1a; 目测观察保险丝是否熔断&#xff0c;如是应更换&#xff1b; 4、注意事项&#xff1a; 如果电…

Python酷库之旅-第三方库Pandas(018)

目录 一、用法精讲 44、pandas.crosstab函数 44-1、语法 44-2、参数 44-3、功能 44-4、返回值 44-5、说明 44-6、用法 44-6-1、数据准备 44-6-2、代码示例 44-6-3、结果输出 45、pandas.cut函数 45-1、语法 45-2、参数 45-3、功能 45-4、返回值 45-5、说明 4…

开启新纪元!被AI驱动的游戏世界,提升游戏体验

随着人工智能的高速发展&#xff0c;人工智能逐渐应用到了生活中的方方面面&#xff0c;人工智能在游戏中也有诸多应用&#xff0c;在游戏里领域扮演了相当重要的角色。游戏AI是伴随着电子游戏而出现的&#xff0c;在早期的游戏中就出现了对抗类AI角色&#xff0c;后来逐渐出现…

服务器数据恢复—开盘修复raid5阵列硬盘故障的数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌P2000存储&#xff0c;存储中有一组由8块硬盘&#xff08;包含一块热备盘&#xff09;组建的raid5阵列。上层部署VMWARE ESX虚拟化平台。 服务器存储故障&#xff1a; 存储在运行过程中有两块硬盘指示灯亮黄色。经过运维人员的初步检…

Sentinel 学习笔记

Sentinel 学习笔记 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 Sentinel 学习笔记[TOC] 前言一、基础概念二、Sentinel控制台2.1 安装控制台2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务降级2.6 服务熔断 三、Sentinel客户端3.1 原始Jar包客户端3.2 Sp…

【Windows】XMedia Recode(免费的专业视频格式转换软件)及同类型软件介绍

今天给大家介绍的这款软件叫XMedia Recode&#xff0c;这是一款免费的专业视频格式转换软件。有需要的朋友可以了解一下哦。 软件介绍 XMedia Recode 是一款功能强大的免费视频转换和音频转换软件&#xff0c;它支持多种格式的视频和音频文件转换&#xff0c;以及简单的编辑…

收银系统源码-商品套餐功能视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

PMP–计算--图示

文章目录 概念基准绩效预测 公式 概念 基准绩效 最常见的基准是成本和进度。跟踪范围或技术基准的项目可以使用可交付物测量指标中的信息。 大多数进度测量指标会根据以下相关的计划绩效来跟踪实际绩效&#xff1a; ▶ 开始日期和完成日期。将实际开始日期与计划开始日期进行…

MD4C 销售订单查询库存/需求清单 函数

MD4C 销售订单查询库存/需求清单 函数 目录 函数 MD_SALES_ORDER_STATUS_REPORT 函数MD_SALES_ORDER_STATUS_REPORT 结果 T-CODE: MD4C

Zynq系列FPGA实现SDI相机编码输出,基于GTX高速接口,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx-Kintex7上的应用 3、详细设计方案设计原理框图输入Sensor之-->OV5640摄像头输入Sensor之-->HDMIHLS图像缩放详解VDMA图像缓存SDI视频输出架构之-->RGB转BT1120SDI视频输出架构之…