leetcode-128-最长连续序列
题目描述:
方法一:集合 O(N)
class Solution: def longestConsecutive(self, nums: List[int]) -> int: nums = set(nums) res = 0 for num in nums: if num-1 not in nums: tmp = 1 while num+1 in nums: num += 1 tmp += 1 res = max(res,tmp) return res
方法二:哈希表 O(N)
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
lookup = {}
res = 0
for num in nums:
if num not in lookup:
# 判断左右是否可以连起来
left = lookup[num - 1] if num - 1 in lookup else 0
right = lookup[num + 1] if num + 1 in lookup else 0
# 记录长度
lookup[num] = left + right + 1
# 把头尾都设置为最长长度
lookup[num - left] = left + right + 1
lookup[num + right] = left + right + 1
res = max(res, left + right + 1)
return res