LeetCode 热题 100-连续最长序列

题目:

解析:

HashSet + 智能遍历
去重与快速查找

  • 将所有数字放入 HashSet(O(1) 查找)
  • 同时去除了重复数字(重复数字不影响连续序列长度)

关键优化:只从序列起点开始查找

  • 对于一个数字 num,如果 num-1 存在于集合中,说明 num 不是某个连续序列的起点
  • 我们只从序列的最小值开始查找
  • 这样可以确保每个连续序列只被遍历一次

算法步骤

  1. 将所有数字存入 HashSet

  2. 遍历 HashSet 中的每个数字 num

  3. 如果 num-1 不在 HashSet 中(num 是序列起点)

  • 初始化当前数字 current = num
  • 初始化当前序列长度 currentStreak = 1
  • 循环检查 current+1 是否在 HashSet 中,如果在,current++,currentStreak++
  • 更新最长序列长度
  1. 返回最长序列长度

代码:

java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> num_set = new HashSet<Integer>();
        for (int num : nums) {
            num_set.add(num);
        }

        int longestStreak = 0;

        for (int num : num_set) {
            if (!num_set.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                while (num_set.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }

                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }

        return longestStreak;
    }
}

补充:

相关推荐
信奥卷王7 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵8 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG9 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
Navigator_Z10 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛10 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记10 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序10 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室10 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
圣保罗的大教堂11 小时前
leetcode 301. 删除无效的括号 困难
leetcode