Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの数字で最大k個の隣接するスワップの後に可能な最小の整数を見つけるプログラム


非常に大きな整数を表すnumという文字列があり、別の値kもあるとします。値の隣接する2桁は、最大でk回交換できます。取得できる最小値を見つける必要があります。

したがって、入力がnum ="5432" k =4の場合、最初の数値は5432であるため、出力は2453になります。最初のフェーズの後は4532、次に4523、次に4253、最後のフェーズは2453になります。

これを解決するために、次の手順に従います

  • min_num:=numの数字を並べ替える

  • i:=0、to_find:=0

  • numはmin_numと同じではなく、k>0およびi

    • indx:=numのインデックスiからのアイテムto_findのインデックス

    • indxは-1と同じではありませんが、実行してください

      • indx --i <=kの場合、

        • num:=num[インデックス0からi-1へ]連結num[indx]concatenatenum[インデックスiからindx-1へ]連結num[インデックスindx+1から終了まで]

        • k:=k-(indx --i)

        • i:=i + 1

        • to_find:=0

        • indx:=numのインデックスiからのアイテムto_findのインデックス

      • それ以外の場合

        • ループから出てきます

    • to_find:=to_find + 1

  • numを返す

理解を深めるために、次の実装を見てみましょう

def solve(num, k):
   min_num = sorted(list(num))
   min_num = ''.join(min_num)
   i = 0
   to_find = 0
   while num != min_num and k > 0 and i < len(num):
      indx = num.find(str(to_find), i)
      while indx != -1:
         if indx - i <= k:
            num = num[:i] + num[indx] + num[i:indx] + num[indx+1:]
            k -= (indx - i)
            i += 1
            to_find = 0
            indx = num.find(str(to_find), i)
         else:
            break
      to_find += 1
   return num

num = "5432"
k = 4
print(solve(num, k))

入力

"5432", 4

出力

2453

  1. Pythonでマージした後も、最小数の色を見つけるプログラムが残っています

    色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(

  2. 数の因子の最小合計を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 入力された数値を指定して、指定された数値の因子の最小合計を求めます。 ここでは、すべての因子とそれに対応する合計を計算し、それらの中から最小値を見つけます。 したがって、数の積の最小合計を見つけるために、積の素因数の合計を見つけます。 これが問題の反復実装です- 例 #iterative approach def findMinSum(num):    sum_ = 0    # Find factors of number and add to the sum