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。

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

  • 相关阅读:
    Charles 手机抓包HTTPS设置以及证书安装
    Charles 抓包配置
    charles Windows 安装
    charles 过滤指定域名
    charles 手机证书下载安装
    charles 手机抓包设置
    charles overvoew
    charles 主界面总结
    charles 右键菜单
    获取近一周,近两周,本月,上个月
  • 原文地址:https://www.cnblogs.com/asenyang/p/12079582.html
Copyright © 2011-2022 走看看