Leetcode每日一题
题目链接: 659. 分割数组为连续子序列
难度: 中等
解题思路: 设置一个堆,里面存储一个MAP,对应的key存储某个子序列的结束的值,value存储当前子序列的长度。这个小顶堆按照value进行排序。每次若能在堆中找到可以添加在后面的序列就加上去,若不行就创建一个新的子序列加入堆顶。
题解:
import heapq
class Solution:
def isPossible(self, nums: List[int]) -> bool:
# 存储一个k/v对,k表示序列的结束,v表示序列的长度
num_dict = collections.defaultdict(list)
for item in nums:
# 创建新的序列
if not num_dict[item - 1]:
heapq.heappush(num_dict[item], 1)
# 可以添加在已有的子序列后面
else:
length = heapq.heappop(num_dict[item - 1])
heapq.heappush(num_dict[item], length + 1)
for k, v in num_dict.items():
if v and v[0] < 3:
return False
return True