力扣练习之最长连续序列

我爱海鲸 2023-09-19 18:35:31 力扣、高级算法

简介高级、力扣

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-hard/xwgcuv/

解法一(python):

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return 0
        nums_set = set(nums)
        max_len = 0
        for num in nums_set:
            if num-1 not in nums_set:
                current_num = num
                current_len = 1
                while current_num + 1 in nums_set:
                    current_len += 1
                    current_num += 1
                max_len = max(max_len,current_len)
        return max_len

思路:从题目中,我们需要知道的一个重点是,题目要求的是最大连续子序的长度,不是最大有序且连续的子序。

首先通过一个set去除数组中重复元素,设置一个变量记录最大子序长度,初始值为0,然后遍历这个set,判断当前元素-1是否在这个set中,(为什么要这么做,就是如果当前元素-1这个元素在这个set中,那么就表示当前元素是某个子序的中间元素,那么我们求出来的最大子序的长度一定是小于真实的最大子序的),然后记录当前元素的值和当前元素开始的最大子序(默认为1,因为从当前元素开始,本身就是一个子序),然后在从当前元素开始+1判断是否在set中,如果存在就继续循环,不存在就和前面的最大子序变量作比较,谁大谁就作为新的最大子序长度。最后返回即可。

你好:我的2025