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

LeetCode热题100精讲——Top3:最长连续序列【哈希】

在这里插入图片描述

你好,我是安然无虞。

文章目录

    • 题目背景
    • 最长连续序列
      • C++解法
      • Python解法

在这里插入图片描述

题目背景

如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第九章·巧解哈希题,用这3种数据类型足矣

最长连续序列

题目链接:最长连续序列

在这里插入图片描述

解题思路:

这道题最直接的想法就是排序,排序之后连续的序列就很容易找到了。但是排序的时间复杂度是 O(NlogN),而题目要求我们时间复杂度为 O(N),所以我们需要另想办法。

想找连续序列,首先要找到这个连续序列的开头元素,然后递增,看看之后有多少个元素还在 nums 中,即可得到最长连续序列的长度了。

由此我们可以想到用空间换时间的思路,把数组元素放到哈希集合里面,然后去寻找连续序列的第一个元素,即可在 O(N) 时间找到答案。

比方说 nums = [8,4,9,1,3,2],我们先找到 1,然后递增,找到了 2, 3, 4,这就是一个长度为 4 的序列。

代码详情:

C++解法

class Solution {
public:
    int longestConsecutive(vector<int>& nums) 
    {
    	// 本题重点在于找到连续序列的第一个值
        // 转化成哈希集合,方便快速判断是否存在某个元素
        unordered_set<int> set;
        for (int num : nums) 
        {
            set.insert(num);
        }
				
      	// 记录结果
        int res = 0;

        for (int num : set) {
            if (set.count(num - 1)) {
                // num 不是连续子序列的第一个,跳过
                continue;
            }
            // num 是连续子序列的第一个,开始继续计算连续子序列的长度
            int curNum = num;
            int curLen = 1;

            while (set.count(curNum + 1)) {
                curNum += 1;
                curLen += 1;
            }
            // 更新最长连续序列的长度
            res = max(res, curLen);
        }

        return res;
    }
};

Python解法

集合的优势就是能够快速判断是否存在某个元素.

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        # 本题重点在于找到连续序列的第一个值
        set_nums = set(nums) # 将数组存放到哈希集合中
        res = 0 # 记录结果

        for num in set_nums:
            # 判断当前值是不是连续序列的第一个值
            if num - 1 in set_nums:
                continue
            
            curNum = num
            curLen = 1

            while curNum + 1 in set_nums:
                curNum += 1
                curLen += 1
            
            res = max(res, curLen)

        return res
        
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

相关文章:

  • 数的划分(dfs)
  • OpenCV图像拼接项目指南
  • 健康养生:铺就活力生活之路
  • CMake-环境变量介绍
  • 第42章:Secret管理与敏感信息保护
  • 2.go基础语法
  • wpf 后台使用图标字体
  • 快速创建 Java 8 兼容的 Spring Boot 项目(阿里云脚手架)
  • 【模拟面试】计算机考研复试集训(第十三天)
  • wordpress主题使用中常见错误汇总
  • 第二十一章:模板与继承_《C++ Templates》notes
  • MyBatis-Plus(Ⅱ)基本CRUD
  • 用户模块——升级swagger文档更漂亮
  • Git的认识安装及创建配置本地仓库
  • Shebang行的写入
  • qt 对QObject::tr()函数进行重定向
  • 【工程实践/源码阅读】批量文件处理步骤以及如何并行处理
  • Ubuntu下用QEMU模拟运行OpenBMC
  • 解决address already in use报错:如何查看占用某个端口的程序并杀死
  • 【uni-app】引用公共组件
  • 贵州锦屏县委原书记舒健已任黔东南州政府办主任
  • 湖北鄂城:相继4所小学有学生腹泻呕吐,供餐企业负责人已被采取强制措施
  • 《求是》杂志发表习近平总书记重要文章《激励新时代青年在中国式现代化建设中挺膺担当》
  • 许峰已任江苏省南京市副市长
  • 央媒关注给保洁人员设休息室:让每一份踏实奋斗得到尊重呵护
  • 人民日报社论:做新时代挺膺担当的奋斗者