leetcode1296

Posted AsenYang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1296相关的知识,希望对你有一定的参考价值。

 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的主要内容,如果未能解决你的问题,请参考以下文章

Python|Leetcode《846》《1296》|一手顺子 划分数组为连续数字的集合

Python|Leetcode《846》《1296》|一手顺子 划分数组为连续数字的集合

p1296

bzoj1296: [SCOI2009]粉刷匠(DP)

消除keil编译警告 #1296-D:extended constant initialiser used

Codeforces Round #617 (Div. 3) 题解 1296C 1296D 1296E 1296F