判断前一位数在不在字典中是这道题的关键之处,这样就可以避免重复查找,从而达到O(n) 的时间复杂度。如果没有这个判断,那么时间复杂度最坏也得是O(N^2)级别的。
1. 题目
2. 分析
- 合理利用数据结构。本题中使用了set来保存数组的元素,这是为了加快数据的查找。
- 聪明地利用规则,从而进一步减少时间复杂度。
3. 代码
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
nums_set = set(nums) # 使用set存储便于查找
max_res = 1
for i in nums:
# 如果i-1 不在set中,那么就必须亲自下场计算值
# 正是这个if 保证了 O(n) 时间复杂度
if i-1 not in nums_set:
cnt = 1
start = i+1
while(start in nums_set):
cnt+=1
start += 1
max_res = max(max_res, cnt)
return max_res