zoukankan      html  css  js  c++  java
  • 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。

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

  • 相关阅读:
    红帽7 创建网络会话
    红帽7 Iptables与Firewalld防火墙
    红帽7 配置网卡
    红帽7 LVM逻辑卷管理器
    红帽7 RAID磁盘冗余阵列
    红帽7 磁盘划分
    wpf学习一(转)
    选中当前点击的位置
    c#客显
    两个程序间的通信有三种
  • 原文地址:https://www.cnblogs.com/asenyang/p/12079582.html
Copyright © 2011-2022 走看看