Pythonで適切なサブアレイの最大スコアを見つけるプログラム
numsという配列と値kがあるとします。サブアレイのスコア(i、j)がサブアレイnums [i..j] *(j-i + 1)の最小値として定義されていると考えてください。ここで、適切なサブアレイは、i <=k<=jであるサブアレイです。良いサブアレイの可能な最大スコアを見つける必要があります。
したがって、入力がnums =[2,5,4,8,5,6] k =3のような場合、最適なサブ配列はここ(1、5)にあるため、出力は20になり、nums[1の最小値になります。 ..5]は4なので、4 *(5-1 + 1)=20
これを解決するには、次の手順に従います-
-
ans:=nums [k]、minNum:=nums [k]
-
i:=k、j:=k
-
i>-1またはj
-
i>-1およびnums[i]>=minNumの場合、実行
-
i:=i-1
-
-
j
=minNum、do -
j:=j + 1
-
-
ans:=ansの最大値と((j --i --1)* minNum)
-
minNum:=最大値(i> -1の場合はnums[i]、それ以外の場合は-1)および(jの場合はnums[j] <それ以外の場合はnumsのサイズ-1)
-
-
ansを返す
例
理解を深めるために、次の実装を見てみましょう
def solve(nums, k): ans = nums[k] minNum = nums[k] i = k j = k while i > -1 or j < len(nums): while i > -1 and nums[i] >= minNum: i -= 1 while j < len(nums) and nums[j] >= minNum: j += 1 ans = max(ans, (j - i - 1) * minNum) minNum = max(nums[i] if i > -1 else -1 , nums[j] if j < len(nums) else -1) return ans nums = [2,5,4,8,5,6] k = 3 print(solve(nums, k))
入力
[2,5,4,8,5,6], 3
出力
20
-
Pythonでmを法とする部分配列の最大合計を見つけるプログラム
Pythonでmを法とする部分配列の最大合計を見つけるプログラム n個の要素を持つ配列numがあるとします。別の整数mがあります。 mを法とするサブ配列の合計の最大値を見つける必要があります。 したがって、入力がnums =[1,5,7,3] m =5のような場合、出力は3になります。 [1] mod 5 =1 [5] mod 5 =0 [7] mod 5 =2 [3] mod 5 =3 [1,5] mod 5 =1 [5,7] mod 5 =2 [7,3] mod 5 =0 [1,5,7] mod 5 =3 [5,7,3] mod 5 =0 [1,
-
Pythonで最大の建物の高さを見つけるプログラム
値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ