leetcode中等128最长连续序列
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等128最长连续序列相关的知识,希望对你有一定的参考价值。
思路:时间复杂度o(n),不能sort
- 定义一个哈希表,用于判断某个数是否存在哈希表中,存某个数所在子列的长度(只有端点的长度重要,别的无所谓)
- 然后遍历数组,如果当前数num存在哈希表,跳过
- 如果当前数num不存在哈希表中,那么查找num-1和num+1这两个数是不是在哈希表中,获取到左右边子列的长度
比如: num=5,1234 678都在哈希表中
此时哈希表中,1的位置和4存的值都是4(证明1或者4所在的连续长度是4),同理 6和8存的值都是3
5不在hash中,进入操作,看看4和6在不在哈希表内,如果在的话,一定是端点,此时长度=4+1+3 = 8
最后,更新当前最长连续串的端点,也就是1的位置(5-4),8的位置(5+3),更新长度为8
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
hash={}
res=0
for num in nums:
if num not in hash:
#获取两端
left=hash.get(num-1,0)
right=hash.get(num+1,0)
#计算长度
cur=left+right+1
res=max(res,cur)
#更新端点
hash[num]=1#随便存,表示出现过
hash[num-left]=cur
hash[num+right]=cur
return res
以上是关于leetcode中等128最长连续序列的主要内容,如果未能解决你的问题,请参考以下文章