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

Pythonで最大消去値を見つけるプログラム


nums(正の値のみ)という配列があり、一意の要素を含むサブ配列を消去するとします。サブアレイ要素の合計であるスコアを取得します。正確に1つのサブアレイを消去することで得られる最大スコアを見つける必要があります。

したがって、入力がnums =[6,3,2,3,6,3,2,3,6]のような場合、最適なサブ配列は[6,3,2]または[2,3,6]なので、合計は11です。

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

  • 見た:=新しい地図
  • ans:=sum:=0
  • l:=0
  • インデックスrと値xnumごとに、実行します
    • xが表示されている場合、
      • インデックス:=見た[x]
      • l <=インデックス、do
        • 見たものを削除する[nums[l]]
        • sum:=sum-nums [l]
        • l:=l + 1
    • sawed [x]:=r
    • 合計:=合計+ x
    • ans:=ansと合計の最大値
  • 回答を返す

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

def solve(nums):
   seen = dict()
   ans = sum = 0
   l = 0
   for r, x in enumerate(nums):
      if x in seen:
         index = seen[x]
         while l <= index:
            del seen[nums[l]]
            sum -= nums[l]
            l += 1

      seen[x] = r
      sum += x
      ans = max(ans, sum)
   return ans

nums = [6,3,2,3,6,3,2,3,6]
print(solve(nums))

入力

[6,3,2,3,6,3,2,3,6]

出力

11

  1. Pythonで同じ長さのk個のリボンの最大長を見つけるプログラム

    リボンの長さを表す正の数のリストがあり、1つの値kもあるとします。リボンは何度でもカットできます。長さrのリボンをk個持つことができるように、最大​​の長さrを見つける必要があります。そのような解決策が見つからない場合は、-1を返します。 したがって、入力がribbons =[1、2、5、7、15] k =5の場合、サイズ15のリボンをそれぞれ長さ5の3つの部分にカットできるため、出力は5になります。次に、サイズ7のリボンをサイズ2と5にカットします。また、サイズ5のリボンがもう1つあるので、合計でサイズ5のリボンが5つ得られます。 これを解決するには、次の手順に従います- 左:=0

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

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