Longest Consecutive Sequence

第一次做的时候用的是真并查集思维去做的,这样需要添加额外记录当前子集长度的变量以及一些复杂的逻辑,九章介绍的这种类并查集的做法更加简单,耗时也更少了,首先把输入变为一个set,然后对每个数自行左右扩张,就可以找到当前数的集合大小,当下一次的数也在这个集合里时,因为我们之前已经遍历过并且已经把set里的对应数删去,所以不会进行多余的搜索

class Solution(object):
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        tmp = set(nums)
        result = 0
        for index, num in enumerate(nums):
            left, right = num, num
            while left - 1 in tmp:
                tmp.remove(left - 1)
                left -= 1
            while right + 1 in tmp:
                tmp.remove(right + 1)
                right += 1
            result = max(result, right - left + 1)

        return result

results matching ""

    No results matching ""