leetcode1296

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が返されます。

グループのすべての要素は、対応するに割り当てることができるならば、それはに残っていると言います。

おすすめ

転載: www.cnblogs.com/asenyang/p/12079582.html