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
相关推荐
水蓝烟雨6 小时前
3337. 字符串转换后的长度 II
算法·leetcode
_日拱一卒7 小时前
LeetCode:226翻转二叉树
数据结构·算法·leetcode
踩坑记录7 小时前
leetcode hot100 64. 最小路径和 medium 递归优化
leetcode·深度优先
样例过了就是过了7 小时前
LeetCode热题100 最长有效括号
c++·算法·leetcode·动态规划
水蓝烟雨8 小时前
3335. 字符串转换后的长度 I
算法·leetcode
小雅痞8 小时前
[Java][Leetcode middle] 15. 三数之和
java·算法·leetcode
Navigator_Z8 小时前
LeetCode //C - 1030. Matrix Cells in Distance Order
c语言·算法·leetcode
无敌昊哥战神8 小时前
【回溯算法巅峰之作】LeetCode 51. N皇后问题详解与常见避坑指南 (C/C++/Python)
c语言·算法·leetcode
leoufung9 小时前
LeetCode 135. Candy:从直觉到最优解的完整推导
算法·leetcode·职场和发展
alphaTao10 小时前
LeetCode 每日一题 2026/4/27-2026/5/3
算法·leetcode