返回

求数字最长连续序列——哈希集巧解“最高频”

前端

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:

    输入:nums = [0,3,7,2,5,8,4,6,0,1]
    输出:9
    解释:最长数字连续序列是 [0, 1, 2, 3, 4, 5, 6, 7, 8]。它的长度为 9。
    提示:

    0 <= nums.length <= 105
    -109 <= nums[i] <= 109

    ---

    好的,请看下面这份关于_leetcode-128-最长连续序列_的博客文章:

    

    

    

    ## 哈希集巧解“最高频”

    在计算机科学领域,“最高频”问题经常出现,即找出列表或数组中最常出现的元素。解决这类问题,哈希集是一个非常有效的工具,它可以帮助我们快速地查找和统计元素出现的频率。

    LeetCode 中的“最长连续序列”问题,也可以通过哈希集来巧妙解决。在哈希集中,我们可以将数组中的每个数字作为键,并将每个数字的连续性作为值。这样,我们就可以快速地查找出哪些数字是连续的,并且可以很容易地计算出最长连续序列的长度。

    ## Python 实现

    ```python
    def longestConsecutive(nums):
        num_set = set(nums)
        max_length = 0

        for num in num_set:
            # 如果当前数字不是连续序列的开头,则跳过
            if num - 1 in num_set:
                continue

            # 找到当前数字连续序列的长度
            current_num = num
            current_length = 1
            while current_num + 1 in num_set:
                current_num += 1
                current_length += 1

            max_length = max(max_length, current_length)

        return max_length

    nums = [100,4,200,1,3,2]
    result = longestConsecutive(nums)
    print(result)  # 输出:4

    nums = [0,3,7,2,5,8,4,6,0,1]
    result = longestConsecutive(nums)
    print(result)  # 输出:9
    ```

    ## 算法的复杂度

    使用哈希集来解决“最长连续序列”问题,其时间复杂度为 O(n),其中 n 是数组的长度。这是因为哈希集的查找和插入都是 O(1) 的操作。

    ## 总结

    通过哈希集,我们可以巧妙地解决“最高频”问题。在“最长连续序列”问题中,我们可以将哈希集用来存储数组中的数字,并通过查找和统计来快速地计算出最长连续序列的长度。这种方法简单易懂,并且具有良好的性能,非常适合解决此类问题。

    我希望这篇文章对您有所帮助!如果您有任何问题或建议,欢迎在评论区留言。