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

Pythonで最大幅ランプを見つけるプログラム


配列numsがあるとすると、ランプはタプル(i、j)であり、i

したがって、入力がnums =[6,0,8,2,1,5]のようである場合、最大幅ランプは(i、j)=(1、5)およびnumsで達成されるため、出力は4になります。 [1]=0およびnums[5]=5。

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

  • B:=新しい地図

  • 0からnumsのサイズの範囲のiの場合、実行します

    • x:=nums [i]

    • xがBにある場合、

      • B [x]

        の最後にiを挿入します
    • それ以外の場合

      • B [x]:=[i]

  • mini:=リストは最初に1つのinfをリストに格納します

  • maxi:=リストは最初に1つの-infをリストに格納します

  • Bのすべてのキーのリストリストを並べ替えるxごとに、実行します

    • miniの最後の要素の最小値とminiの最後にB[x]の最小値を挿入します

  • Bのすべてのキーの逆にソートされたリストの各xについて、実行します

    • miniの最後の要素の最小値とminiの最後にB[x]の最小値を挿入します

  • maxi:=reverse maxi次に、サブ配列を最初から最後から2番目の要素まで取得します

  • mini:=miniのサブ配列[インデックス1から終了まで]

  • p:=0

  • res:=-inf

  • p <ミニのサイズ、do

    • res:=resの最大値と(maxi [p] --mini [p])

    • p:=p + 1

  • 解像度を返す

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

def solve(nums):
   B = {}
   for i in range(len(nums)):
      x = nums[i]
      if x in B:
         B[x].append(i)
      else:
         B[x] = [i]

   mini = [float('inf')]
   maxi = [float('-inf')]
   for x in sorted(B.keys()):
      mini.append(min(mini[-1], min(B[x])))

   for x in sorted(B.keys(), reverse = True):
      maxi.append(max(maxi[-1], max(B[x])))

   maxi = maxi[::-1][:-1]
   mini = mini[1:]

   p = 0
   res = float('-inf')
   while p < len(mini):
      res = max(res, maxi[p] - mini[p])
      p += 1

   return res

nums = [6,0,8,2,1,5]
print(solve(nums))

入力

[6,0,8,2,1,5]

出力

4

  1. Pythonで最大の建物の高さを見つけるプログラム

    値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ

  2. Pythonで二分木の最大幅を見つけるプログラム

    二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d