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

Pythonのサブ配列の最大絶対和を見つけるプログラム


numsという配列があるとします。サブ配列[nums_l、nums_l + 1、...、nums_r-1、nums_r]の絶対和は| nums_l + nums_l + 1 + ... + nums_r-1 +nums_r|である必要があります。 numsのサブ配列の最大絶対合計を見つける必要があります(そのサブ配列は空である可能性があります)。

したがって、入力がnums =[2、-4、-3,2、-6]の場合、サブ配列[2、-4、-3,2]の絶対サブ配列の合計は最大であるため、出力は11になります。 2 +(-4)+(-3)+ 2 | =11.

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

  • n:=numsのサイズ

  • ans:=0、temp:=0

  • 0からn-1の範囲のiの場合、実行

    • temp <0の場合、

      • temp:=0

    • temp:=temp + nums [i]

    • ans:=ansと|temp |

      の最大値
  • temp:=0

  • 0からn-1の範囲のiの場合、実行

    • temp> 0の場合、

      • temp:=0

    • temp:=temp + nums [i]

    • ans:=ansと|temp |

      の最大値
  • ansを返す

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

def solve(nums):
   n=len(nums)
   ans=0
   temp=0

   for i in range(n):
      if (temp<0):
         temp=0
   temp=temp+nums[i]
   ans=max(ans,abs(temp))

   temp=0
   for i in range(n):
      if (temp>0):
         temp=0
      temp=temp+nums[i]
      ans=max(ans,abs(temp))

   return ans

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

入力

[2,-4,-3,2,-6]

出力

11

  1. Pythonでツリーの隣接していないノードの最大合計を見つけるプログラム

    二分木があるとすると、2つの値が親から子に隣接できない場合に、取得できる値の最大合計を見つける必要があります。 したがって、入力が次のような場合 10、4、3が互いに隣接していないため、出力は17になります。 これを解決するには、次の手順に従います- 関数f()を定義します。これはノードを取ります ノードがnullの場合、 return(0、0) (a、b):=f(ノードの左側) (c、d):=f(ノードの右側) ペアを返します(ノード+ b+dとa+c、a + cの値の最大値) メインメソッドからf(root)を呼び出し、その最初の値を返します 理解を深めるために、次

  2. Pythonで括弧のバランスの取れたグループの最大数を見つけるプログラム

    バランスの取れた括弧「(」と「)」を含む文字列sがあるとすると、それらをバランスの取れたグループの最大数に分割する必要があります。 したがって、入力が「(()())()(())」のような場合、出力は[(()())、()、(())] これを解決するには、次の手順に従います- temp:=空白の文字列 groups:=新しいリスト count:=0 sの各文字bについて、 カウントが0と同じで、tempのサイズが0より大きい場合、 グループの最後に臨時雇用者を挿入 temp:=空白の文字列 temp:=temp concatenate b bが(と同じ場合、 count