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

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

  1. 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,

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

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