Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

Your algorithm should run in O(n) complexity.

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Example:

Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

这个题目就利用hash table,python中用set来表示,s1是整个nums的hash table,s2记录visited num。然后for num in nums,每个num看看是否被visited过,其实有点DFS的思路,如果没有被visited过,将其标记为visited,然后两个while loop分别找比num大的和小的连续的数,最后将ans和count进行比较,最后返回ans即可。

Code:T: O(n),   S:O(n)

class Solution:
    def longestConsecutiveSequence(self, nums: List[int]) -> int:
        ans, s1, s2 = 0, set(nums), set()
        for num in nums:
            if num in s2:
                continue
            count, temp = 1, num
            while (num + 1 in s1 and num + 1 not in s2):
                s2.add(num + 1)
                count += 1
                num += 1
            num = temp
            while (num - 1 in s1 and num - 1 not in s2):
                s2.add(num - 1)
                count += 1
                num -= 1
            ans = max(ans, count)
        return ans

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄