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;
    }
}

补充:

相关推荐
8Qi84 小时前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
小宋加油啊8 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly8 小时前
前沿算法深度解析(一)
算法
小欣加油9 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
happymaker062611 小时前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊12 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
八解毒剂13 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录14 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz14 小时前
算法总结(二分查找、双指针)
c++·算法