在Python中进行K个求反后,最大化数组总数

假设我们有一个整数数组A,我们必须按以下方式修改数组-

我们可以选择一个i并将A [i]替换为-A [i],然后将这一过程重复K次。以这种方式更改数组后,我们必须返回数组的最大可能和。

因此,如果数组A = [4,2,3],且K = 1,则输出将为5。因此,选择索引1,数组将变为[4,-2,3]

为了解决这个问题,我们将遵循以下步骤-

  • 对数组A排序

  • 当我的范围是0到A – 1的长度

    • 如果A [i] <0,则A [i]:=-A [i],并将k减1

    • 如果k = 0,则退出循环

  • 如果k是偶数

    • 如果A [i]> 0,则sp:= sp和A [i]的最小值

    • sp:= A [0]

    • 对于i:= 1至A – 1的长度

    • 返回A的元素之和–(2 * sp)

  • 否则,返回A的元素之和

范例(Python)

让我们看下面的实现以更好地理解-

class Solution(object):
   def largestSumAfterKNegations(self, A, K):
      A.sort()
      for i in range(len(A)):
         if A[i] <0:
            A[i] = -A[i]
            K-=1
         if K==0:
            break
      if K%2:
         smallest_positive = A[0]
         for i in range(1,len(A)):
            if A[i]>=0:
               smallest_positive = min(smallest_positive,A[i]) return sum(A) - (2*smallest_positive)
            else:
               return sum(A)
ob1 = Solution()print(ob1.largestSumAfterKNegations([3,-1,0,2],3))

输入值

[3,-1,0,2]
3

输出结果

6