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

Pythonで最大k個の否定演算を実行して最大合計を見つけるプログラム


numsという要素のリストがあり、別の値kもあるとします。ここで、numsから要素を選択してそれを否定する操作について考えてみましょう。正確にk個の操作を実行できます。生成できる最大の結果の合計を見つける必要があります。

したがって、入力がnums =[2、1、-6、-2] k =3のような場合、-6と-2を否定すると、出力は9になり、1は[2、-1、6 、2]そしてその合計は9です。

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

  • n:=numsのサイズ

  • nが0と同じ場合、

    • 0を返す

  • リスト番号を並べ替える

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

    • nums [idx]<0かつk>0の場合、

      • k:=k-1

      • nums [idx]:=-nums [idx]

  • kが奇数の場合、

    • return(numsに存在するすべての要素の合計)-(2 * numsの最小値)

  • numsに存在するすべての要素の合計を返す

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

def solve(nums, k):
   n = len(nums)
   if n == 0:
      return 0

   nums.sort()
   for idx in range(n):
      if nums[idx] < 0 and k > 0:
         k -= 1
         nums[idx] *= -1

   if k & 1 == 1:
      return sum(nums) - 2 * min(nums)

   return sum(nums)

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

入力

[2, 1, -6, -2], 3

出力

9

  1. Pythonで隣接するサブアレイの最大積を見つけるプログラム

    numsという配列があるとすると、最大の積を持つ配列(少なくとも1つの数値を含む)内の連続するサブ配列の要素の積を見つける必要があります。したがって、配列が[1,9,2,0,2,5]の場合、連続するサブ配列[1,9,2]の積が最大になるため、出力は18になります。 これを解決するには、次の手順に従います- max_list:=サイズ番号のリスト、0で埋める min_list:=サイズ番号のリスト、0で埋める min_list:=サイズ番号のリスト、0で埋める 1からnumsの長さのiの場合 max_list [i] =max_list [i-1] * nums [i]、min_li

  2. PythonでNを1に減らす最大の操作を見つける

    2つの数PとQがあり、それらが数N =(P!/ Q!)を形成するとします。可能な最大数の操作を実行して、Nを1に減らす必要があります。各操作で、NがXで割り切れる場合、NをN/Xに置き換えることができます。可能な最大数の操作を返します。 したがって、入力がA =7、B =4の場合、Nは210、除数は2、3、5、7であるため、出力は4になります。 これを解決するには、次の手順に従います- N:=1000005 因数:=サイズNの配列で、0で埋める メインの方法から、次のようにします- 2からNの範囲のiの場合、実行します factor [i]が0と同じ場合、