LeetCode 最长连续序列:哈希集合的巧妙解法(Python)
📅 2026/7/8 5:47:18
👁️ 次浏览
题目描述给定一个未排序的整数数组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(n log n)不满足题目对O(n)的要求。要实现线性时间复杂度关键在于避免对每个元素都进行重复的“向前/向后”查找。核心思路将所有数字存入一个哈希集合set中实现O(1)的查找。遍历集合中的每个数字但只从“序列的起点”开始计数。如何判断一个数字是否是序列的起点如果num - 1不在集合中说明num可能是一个连续序列的起始数字。对于每个起点不断检查num 1,num 2... 是否在集合中从而计算出以该数字为起点的连续序列长度。记录遍历过程中遇到的最大长度。这个算法之所以是O(n)是因为每个数字最多被访问两次一次在外部循环中判断是否为起点一次在内层 while 循环中作为连续序列的一部分被检查且集合操作是O(1)。算法执行过程示例为了更直观地理解算法的执行逻辑我们以题目中的数组[100, 4, 200, 1, 3, 4, 2]为例逐步分析算法的执行过程。第一步去重并构建哈希集合首先将数组转换为集合去除重复元素原始数组: [100, 4, 200, 1, 3, 4, 2] 去重后的集合: {100, 4, 200, 1, 3, 2}第二步遍历集合寻找序列起点并计算长度接下来遍历集合中的每个元素判断是否为连续序列的起点即num - 1不在集合中元素 100检查 99 是否在集合中 → 不在 → 100 是起点。以 100 为起点向后查找101 不在集合中 → 序列结束。序列为 [100]长度为 1。元素 4检查 3 是否在集合中 → 在 → 4 不是起点跳过。元素 200检查 199 是否在集合中 → 不在 → 200 是起点。以 200 为起点向后查找201 不在集合中 → 序列结束。序列为 [200]长度为 1。元素 1检查 0 是否在集合中 → 不在 → 1 是起点。以 1 为起点向后查找2 在集合中 → 长度1当前长度2。继续查找3 在集合中 → 长度1当前长度3。继续查找4 在集合中 → 长度1当前长度4。继续查找5 不在集合中 → 序列结束。序列为 [1, 2, 3, 4]长度为 4。元素 3检查 2 是否在集合中 → 在 → 3 不是起点跳过。元素 2检查 1 是否在集合中 → 在 → 2 不是起点跳过。第三步更新并返回最大长度遍历过程中记录的最大长度为 4来自以 1 为起点的序列。复杂度分析验证在这个例子中元素 100、200、1 分别作为起点被完整访问一次外层循环判断 内层 while 循环。元素 4、3、2 仅在外层循环中被访问一次判断不是起点后跳过。每个元素最多被访问两次符合 O(n) 的时间复杂度分析。通过这个具体的例子我们可以清晰地看到算法如何通过“只从序列起点开始计数”的策略避免了重复计算同时保证了线性时间复杂度。代码实现Python以下是基于上述思路的 Python 实现from typing import List class Solution: def longestConsecutive(self, nums: List[int]) - int: # 记录最长序列长度 max_length 0 # 将数组转换为集合用于 O(1) 查找同时去重 num_set set(nums) for num in num_set: # 只有当 num 是某个连续序列的起点时才进行内层循环 if num - 1 not in num_set: current_length 1 current_num num # 向后查找连续的数字 while current_num 1 in num_set: current_length 1 current_num 1 # 更新最大长度 max_length max(max_length, current_length) return max_length代码解析去重与快速查找num_set set(nums)将列表转换为集合既去除了重复元素又为后续的in操作提供了O(1)的时间复杂度。寻找序列起点if num - 1 not in num_set:是算法的关键。如果num - 1存在于集合中那么num肯定不是当前连续序列的起点我们可以跳过它因为以num - 1为起点的序列一定会覆盖num。计算序列长度对于每个起点使用while循环不断检查current_num 1是否在集合中并累加长度。更新最大值每次计算完一个序列的长度后用max函数更新全局最大值。复杂度分析时间复杂度O(n)。虽然代码中有嵌套循环但每个数字最多被访问两次一次在外层循环判断起点一次在内层循环作为序列的一部分因此总体是线性的。空间复杂度O(n)。用于存储哈希集合。总结本题的难点在于如何在线性时间内解决问题。通过使用哈希集合和“只从序列起点开始计数”的巧妙策略我们避免了排序也避免了为每个元素进行重复的线性搜索。这是一种典型的“用空间换时间”的策略也是处理数组查找类问题的常用技巧。
.mat 文件在深度学习中的存储效率与加载速度优势解析当我们在构建深度学习数据管道时,文件格式的选择往往被低估。大多数开发者会本能地选择PNG或JPEG这类通用图像格式,却忽略了.mat格式在特定场景下的显著优势。本文将深入分析.mat文件在存储效率、加载…
📅 2026/7/8 5:45:18
2026 上半年大模型 API 格局全回顾:免费额度、新模型、价格战与开发者生态
半年时间,大模型 API 这一层几乎是月月有变化。借着年中节点,从头梳理一遍,既是给自己的笔记,也供大家参考。一、免费额度:总量没…
📅 2026/7/8 5:45:18
🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在知识管理领域,Obsidian凭借其强大的双向链接和本地优先特性,已经成为众多开发者和研究人员的首选工具。然而…
📅 2026/7/8 5:45:18
在快节奏的生活里,大家越来越重视健康和养生。养生酒作为一种结合了传统中医理论与现代生活需求的产品,逐渐受到人们的青睐。但是,市场上的养生酒品牌众多,质量参差不齐,如何挑选一款真正让人放心饮用的好酒呢…
📅 2026/7/8 6:57:37
了,换个任务,它又忘得一干二净。这其实是当前大多数 AI 工具的通病:没有持久记忆,没有固定身份,没有对你的真实了解。而今天要介绍的这套「灵魂三件套」,正是为了解决这个问题。当小龙虾拥有了身份、获得了…
📅 2026/7/8 6:57:37
Small Language Models、On-device AI 与边缘部署趋势:从“小模型”到端侧智能系统系列:AI 论文盘点 / 技术趋势,第二轮:2026 AI 系统与 Agent 基础设施专题
日期:2026-07-06
适合读者:研究生、端侧 AI/推理…
📅 2026/7/8 6:57:37
ChatGPT 提示工程进阶:3类结构化模板解决90%开发难题1. 为什么开发者需要掌握提示工程?在代码调试的深夜,你是否曾对着模糊的错误信息束手无策?当学习新技术栈时,是否希望有个能理解你知识背景的导师?这些场…
📅 2026/7/8 6:57:37
怎样在6个月内从零基础转码成功:非科班程序员的完整实战指南 【免费下载链接】InterviewGuide 🔥🔥「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总,包括但…
📅 2026/7/8 6:57:37
人机协作,仅供参考记忆力是否天生注定、无法更改?现代认知科学给出的答案是否定的。记忆如同肌肉,可以通过科学的训练方法加以强化。以下七则经过实践检验的记忆法则,构成了一个完整的记忆提升系统,它们相互关联&#…
📅 2026/7/8 6:55:37
Docker 彻底卸载指南:CentOS/Ubuntu 双系统 5 步清理残留文件当 Docker 环境出现版本冲突、安装失败或需要迁移时,常规的卸载命令往往无法彻底清理系统。残留的配置文件、依赖项和缓存文件可能导致新安装的 Docker 出现各种诡异问题。本文将提供一套完整…
📅 2026/7/8 0:00:10
SQL 数据分析性能优化实战:窗口函数 vs 子查询 vs 临时表 在数据分析工作中,SQL查询性能往往是决定工作效率的关键因素。面对复杂的业务场景,如何选择最优的查询方案?本文将深入对比窗口函数、子查询和临时表三种技术方案…
📅 2026/7/8 0:00:10
日期:2026-07-07> 本期聚焦近一日(2026-07-06 至 07-07)出台的金融与行业政策,按"背景—核心—影响—受益/风险"四维度解读。政策内容依据原始发布信息整理,解读仅供参考,不构成投资建议。一、…
📅 2026/7/8 0:00:10
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/7 12:08:23
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/7 9:08:28
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/7 6:33:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/7 9:08:31
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/7 9:08:30
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/7 4:32:18