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

Pythonで同じ高さのk個の塔を作るために必要なレンガの最小数を見つけるためのプログラム


塔の高さのリストと正の値kがあるとします。 k個のタワーを選択し、レンガを追加してすべて同じ高さにしますが、使用するレンガはできるだけ少なくします。 k個の塔を選び、同じ高さにするために必要なレンガの最小数を見つける必要があります。

したがって、入力がheights =[4、7、31、14、40] k =3のような場合、出力は17になります。これは、5、8、および15を選択できるため、同じ高さを作成するには17個のブリックが必要です。 。

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

  • リストの高さを並べ替える
  • ans:=無限大
  • s:=0
  • 高さの各インデックスiと値xについて、実行します
    • s:=s + x
    • i> =kの場合、
      • s:=s-高さ[i-k]
    • i> =k-1の場合、
      • ans:=最小のansおよび(x * k-s)
  • 回答を返す

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

class Solution:
   def solve(self, heights, k): heights.sort()
      ans = float("inf")
      s = 0
      for i, x in enumerate(heights):
         s += x
         if i >= k:
            s -= heights[i - k]
         if i >= k - 1:
            ans = min(ans, x * k - s)
      return ans
ob = Solution()
heights = [5, 8, 32, 15, 41]
k = 3
print(ob.solve(heights, k))

入力

[5, 8, 32, 15, 41], 3

出力

17

  1. Pythonで1つの文字列を他の文字列のサブ文字列にするために必要な最小数の操作を見つけるプログラム

    2つの文字列sとtがあるとすると、sがtをsの部分文字列にするために必要な操作の最小量を見つける必要があります。これで、各操作で、s内の任意の位置を選択し、その位置の文字を他の任意の文字に変更できます。 したがって、入力がs =abbpqr、t =bbxyの場合、サブストリング bbpqを取得して、pをxに、qをに変更できるため、出力は2になります。 y。 これを解決するには、次の手順に従います- k:=tのサイズ、n:=sのサイズ ans:=10 ^ 10 0からn-kの範囲のiの場合、do ss:=s[インデックスiからi+k-1へ]の部分文字列 ans:=最小のans