leetcode hot100 最长连续子序列 哈希表 medium

大 O 的加法规则 :O(f(n))+O(g(n))=O(max(f(n),g(n)))

例如:

python 复制代码
nums_sorted  = sorted(nums)
for i in range(1, len(nums_sorted)):
    ... ...

时间总复杂度 = 排序 + 遍历 。O(nlog⁡n) + O(n) = O(max(n log n, n)) = O(n log n )

(增长速度:n log n > n

时间复杂度 :O(n log n )

python 复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if not nums:
            return 0

        nums_sorted  = sorted(nums)
        print(nums_sorted)

        max_len = 1
        cur_len = 1

        for i in range(1, len(nums_sorted)):
            if nums_sorted[i] == nums_sorted[i-1] + 1:   # # 连续
                cur_len +=1    # 如果最后一个数字在最长连续里,此时 max_len没有更新,就会退出循环了
            elif nums_sorted[i] == nums_sorted[i-1] :   # # 重复,题意要求,重复不算断开
                cur_len = cur_len
            else:
               max_len = max(cur_len, max_len)
               cur_len = 1

        return max(max_len, cur_len)
        

时间复杂度 :O(n)

要真正实现 O(n) → 需要用 哈希表法:

遍历每个数字,只从"序列起点"开始向右查找连续数字,这样每个数字最多访问一次 → O(n)

子序列起点:n是最小数字

python 复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:

        if not nums:
            return 0
        num_set = set(nums)   # 去重,题意重复的不算
        maxlen = 1

        for n in num_set:
            if n-1 not in num_set:   # 子序列起点:n是最小数字
                temp = n
                cur_len =1  # 子序列长度

                while temp+1 in num_set:   # 走完起点为n的子序列  # O(1) 查找
                    temp = temp+1 
                    cur_len += 1

                # 跳出while,走完子序列
                maxlen = max(maxlen, cur_len)

        return maxlen
相关推荐
旖旎夜光8 分钟前
LeetCode 974:和可被 K 整除的子数组(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
alphaTao1 天前
LeetCode 每日一题 2026/8/24-2026/8/30
python·算法·leetcode
CoderYanger2 天前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试
Navigator_Z2 天前
LeetCode //C - 1221. Split a String in Balanced Strings
c语言·算法·leetcode
玄昌盛不会编程2 天前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
旖旎夜光2 天前
LeetCode 238:除自身以外数组的乘积(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
学习星球3 天前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
血小板要健康3 天前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
鹿角片ljp3 天前
LeetCode 141. 环形链表|从 HashSet 到快慢指针 O (1) 空间最优解
算法·leetcode·链表
ZC跨境爬虫3 天前
LeetCode 219. 存在重复元素 II(滑动窗口 + 哈希表详解)
算法·leetcode·散列表