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]
それ以外の場合
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
-
Pythonで最大の建物の高さを見つけるプログラム
値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ
-
Pythonで二分木の最大幅を見つけるプログラム
二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d