Sort all the numbers. For the least number i, there should be i, i + 1, ..., i + k - 1 to make up the first group. And for all i + j where j < k, we could always use the first one to be in the first group.
So we use greedy, handle with the numbers in increasing order. Once we face a new number, we first check if it is required for the groups starts with previous numbers. If yes, we mark it into the group. If no, we create a new group starts with this number by adding count[i] by 1 for all number <= i < number + k.
from collections import defaultdict
class Solution:
def isPossibleDivide(self, nums, k) -> bool:
nums.sort()
count = defaultdict(int)
for num in nums:
if count[num] <= 0:
for l in range(k):
count[num + l] += 1
count[num] -= 1
for v in count.values():
if v > 0:
return False
return True