遍历数组
用一个dict记录,遍历到现在的值val,
假设val是新出现的数值,
则算上此前出现过的元素
val所在的连续段的长度
则 当前长度为 比val小1的连续段所对应的长度 + 自己为1的长度 + 比val大1的连续段所对应的长度
显然 当比val小1或比val大1没有出现在dict中时
我们认为上面的左边和右边为0
计算完当前长度后 我们更新一次最大长度
而后,更新dict中 自己、比自己小1 (若存在于dict的话)、 比自己大1(若存在于dict的话)的值
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
max_len = 0
big_dict = {}
for val in nums:
if val not in big_dict:
left = big_dict[val-1] if val - 1 in big_dict else 0
right = big_dict[val+1] if val + 1 in big_dict else 0
cur_len = 1 + left + right
max_len = max(max_len,cur_len)
big_dict[val] = cur_len
if val - left in big_dict:
big_dict[val - left] = cur_len
if val + right in big_dict:
big_dict[val + right] = cur_len
return max_len