您现在的位置是:首页 >技术交流 >【LeetCode Hot100】 最长连续序列[特殊字符]哈希表+双指针,Java实现!图文详解,小白也能秒懂!网站首页技术交流

【LeetCode Hot100】 最长连续序列[特殊字符]哈希表+双指针,Java实现!图文详解,小白也能秒懂!

AllowM 2026-03-09 12:01:04
简介【LeetCode Hot100】 最长连续序列[特殊字符]哈希表+双指针,Java实现!图文详解,小白也能秒懂!

💻 [LeetCode Hot100] 最长连续序列🔥哈希表+双指针,Java实现!图文详解,小白也能秒懂!

✏️本文对应题目链接:最长连续序列


📌 题目描述

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

示例:

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

🧠 解题思路(图文分解)

❗ 核心难点

如何高效找到连续序列的起点,并快速计算序列长度?

哈希表+双指针法(黄金思路)✨

关键步骤:

  1. 创建哈希表:存储所有数字,方便快速查找
  2. 遍历数组:找到每个连续序列的起点(即当前数字的前一个数不在哈希表中)
  3. 计算长度:从起点开始,向后查找连续的数字,直到中断
  4. 更新最大值:记录最长的连续序列长度

动态过程图解:

输入数组:[100, 4, 200, 1, 3, 2]
哈希表:{100, 4, 200, 1, 3, 2}

遍历到1:
- 1的前一个数0不在哈希表 → 1是起点
- 向后查找2,3,4 → 序列长度为4

🚀 代码实现

import java.util.*;

class Solution {
    public int longestConsecutive(int[] nums) {
        // 创建哈希表存储所有数字
        Set<Integer> numSet = new HashSet<>();
        for (int num : nums) {
            numSet.add(num);
        }

        int longestStreak = 0; // 记录最长连续序列长度

        // 遍历数组
        for (int num : numSet) {
            // 如果当前数字的前一个数不在哈希表中,说明它是连续序列的起点
            if (!numSet.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                // 向后查找连续的数字
                while (numSet.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }

                // 更新最长连续序列长度
                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }

        return longestStreak;
    }
}

💡 复杂度分析

  • 时间复杂度:O(n) → 每个数字最多被访问两次(一次在哈希表中,一次在查找序列时)
  • 空间复杂度:O(n) → 哈希表存储所有数字

🌟 总结要点

哈希表核心作用:快速判断数字是否存在
双指针思想:从起点向后扩展,计算序列长度
适用场景:需要快速查找和统计连续性的问题


🔥 下期预告:《移动零》双指针法轻松解决数组操作难题!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。