Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split them into several subsequences, where each subsequences consist of at least 3 consecutive integers. Return whether you can make such a split.
Example
Input: [1,2,3,3,4,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3
3, 4, 5
Solution
import collections
class Solution:
def isPossible(self, nums: List[int]) -> bool:
left = collections.Counter(nums)
end = collections.Counter()
for i in nums:
if not left[i]:
continue
left[i]-=1
if end[i-1]>0:
end[i-1]-= 1
end[i]+= 1
elif left[i+1] and left[i+2]:
left[i+1]-= 1
left[i+2]-= 1
end[i+2]+= 1
else:
return False
return True
class Solution(object):
def isPossible(self, nums):
# Time: O(n.lgn)
# Space: O(n)
import heapq
seqs = {num: [] for num in nums}
for num in nums:
shortest_seq = 0
if num - 1 in seqs and len(seqs[num - 1]):
shortest_seq = heapq.heappop(seqs[num - 1])
heapq.heappush(seqs[num], shortest_seq + 1)
return len([None for seq_lengths in seqs.values() if len(seq_lengths) and seq_lengths[0] < 3]) == 0