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

补充:

相关推荐
测试19983 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
心中有国也有家7 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事7 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
碧海银沙音频科技研究院7 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
csdn_aspnet8 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
一只机电自动化菜鸟9 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
m0_6294947311 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户11 小时前
用队列实现栈
数据结构·算法
做人求其滴11 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣