【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) → 哈希表存储所有数字

🌟 总结要点

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值