1 import collections
 2 class Solution:
 3     def isPossibleDivide(self, nums: 'List[int]', k: int) -> bool:
 4         n = len(nums)
 5         if n % k != 0:#必须是整倍数
 6             return False
 7         dic = collections.OrderedDict()#有序字典
 8         nums = sorted(nums)#有序数组
 9         keylist = []
10         for i in range(n):
11             if nums[i] not in dic:
12                 dic[nums[i]] = 1
13                 keylist.append(nums[i])#只保存key值,并且有序
14             else:
15                 dic[nums[i]] += 1
16         gc = n // k#一共gc组
17         while gc > 0:
18             gc -= 1
19             firstkey = keylist[0]
20             if dic[firstkey] > 1:
21                 dic[firstkey] -= 1
22             else:
23                 dic.pop(firstkey)
24                 keylist.remove(firstkey)
25             nextkey = firstkey
26             for t in range(1,k):
27                 nextkey += 1
28                 if nextkey in dic:
29                     if dic[nextkey] > 1:
30                         dic[nextkey] -= 1
31                     else:
32                         dic.pop(nextkey)
33                         keylist.remove(nextkey)
34                 else:
35                     return False
36         return True

算法思路:贪心。

先将数组排序,然后按照顺序添加到顺序字典中。

另记录一个key值从小到大的列表。

每次从key列表中选择最小的元素,作为组头,当前组的剩余k-1个元素,依次+1。如果不满足这个条件,则返回False。

如果全部的元素都能分配到对应的组中,就表示符合题意。

posted on 2019-12-22 13:26  Sempron2800+  阅读(153)  评论(0编辑  收藏  举报