Description
Given an array of integers nums and a positive integer k, find whether it’s possible to divide this array into sets of k consecutive numbers
Return True if its possible otherwise return False.
Example 1:
Input: nums = [1,2,3,3,4,4,5,6], k = 4
Output: true
Explanation: Array can be divided into [1,2,3,4] and [3,4,5,6].
Example 2:
Input: nums = [3,2,1,2,3,4,3,4,5,9,10,11], k = 3
Output: true
Explanation: Array can be divided into [1,2,3] , [2,3,4] , [3,4,5] and [9,10,11].
Example 3:
Input: nums = [3,3,2,2,1,1], k = 3
Output: true
Example 4:
Input: nums = [1,2,3,4], k = 3
Output: false
Explanation: Each array should be divided in subarrays of size 3.
Constraints:
- 1 <= nums.length <= 10^5
- 1 <= nums[i] <= 10^9
- 1 <= k <= nums.length
分析
题目的意思是:给你一个数组,把他分成若干个数组,每个数组包含K个连续值。这道题很明显需要对每个数进行统计,然后按照顺序进行遍历,每次循环找K个连续的值,知道字典里面的数为空为止,如果凑不齐K个值,则返回False。这道题需要用到OrderedDict,python不大熟悉,如果熟悉的话应该做得出来。
代码
class Solution:
def isPossibleDivide(self, nums: List[int], k: int) -> bool:
nums.sort()
cnt_dict = OrderedDict()
for num in nums:
if(num not in cnt_dict):
cnt_dict[num]=1
else:
cnt_dict[num]+=1
while(cnt_dict):
n=next(iter(cnt_dict))
for i in range(n,n+k):
if(i not in cnt_dict):
return False
cnt_dict[i]-=1
if(not cnt_dict[i]):
del cnt_dict[i]
return True
参考文献
[LeetCode] Python3 sorting + OrderedDict - Divide Array in Sets of K Consecutive Numbers