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