1 インポートコレクション 2 クラスソリューション: 3 DEF isPossibleDivide(セルフ、NUMS:' 一覧の[int] '、K:INT) - > BOOL: 4 N- = LEN(NUMS) 。5 IF!N-%以下のK = 0: #は整数でなければなりません倍数 6 戻り偽 7 DIC = collections.OrderedDict() #は、辞書順序付け 8。 NUMSを=(NUMS)ソート#はアレイを注文した 9。 キーリスト= [] 10 のための I におけるレンジ(N): 11 IF[I] NUMS ない でDIC: 12です 。DIC [NUMS [I] 1 = 13れる keylist.append(NUMS [I]) #は唯一のキー値を保存し、注文した 14の 他: 15 DIC [NUMS [I] = + 。1 16 GC = N-K // #総グループGC 。17 ながら GC> 0: 18である 。GC - = 1 。19 のfirstKey = キーリスト[0] 20である IF DIC【のfirstKey]> 1。 : 21れる DIC【のfirstKey] - 1 = 22である 他: 23 dic.pop(FIRSTKEY) 24 keylist.remove(FIRSTKEY) 25 nextkey = FIRSTKEY 26 のための T での範囲(1 、K): 27 nextkey + = 1 28 なら nextkey でDIC: 29 であれば DIC [nextkey]> 1 : 30 DIC 【nextkey] - = 1 31 他: 32 dic.pop(nextkey) 33 keylist.remove(nextkey) 34 他: 35 リターン偽 36 リターン真
アルゴリズムのアイデア:貪欲。
最初のソート配列は、次いで、辞書の順で順番に加えました。
別のレコード小規模から大規模なリストへのキー値。
最初のグループとしてリストの最小要素から各選択キー、K-1、現在のグループの、1オーダーの残りの要素。この条件が満たされていない場合は、Falseが返されます。
グループのすべての要素は、対応するに割り当てることができるならば、それはに残っていると言います。