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