心路历程:
这道题一开始没想出来该怎么做,以看到要求O(N)的时间复杂度,第一反应是用双指针,但是后来发现双指针很难和连续这个概念联系起来。后来发现集合的查询复杂度是O(1)的,在一次遍历中可以进行任意次数的查询。因此这道题其实在考察哈希表数据结构。
注意的点:
1、连续的序列,意味着只要找到一个最大值,通过最大值- -就可以循环判断出序列的长度
2、不要用list做查询,要用set做查询。
解法:哈希表
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
# 用集合去帮忙遍历,因为集合的查询操作是O(1)的
set1 = set(nums)
count = 0
for i in range(len(nums)):
if nums[i] + 1 in set1: # 证明nums[i]不是最大的
continue
else: # 证明nums[i]此时最大
temp = nums[i]
c = 0
while temp in set1:
c += 1
temp -= 1
count = max(count, c)
return count