码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode1296

时间:2019-12-22 14:38:45      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:move   算法   dict   思路   rem   leetcode   依次   有序字典   pen   

 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。

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

leetcode1296

标签:move   算法   dict   思路   rem   leetcode   依次   有序字典   pen   

原文地址:https://www.cnblogs.com/asenyang/p/12079582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!