使用C ++中的给定操作最大化数组和
描述
(2*n–1)个整数数组。我们可以更改数组中恰好n个元素的符号。换句话说,我们可以精确选择n个数组元素,并将每个元素乘以-1。找到数组的最大和。
示例
如果输入数组为{-2,100,-3},那么我们可以获得-2和-3的最大变化符号。更改符号数组后变为-
{2,100,3},此数组的最大和为105。
算法
计算负数
通过取数字的绝对值来计算数组的总和。
通过取数字的绝对值来找到数组的最小数
检查是否。的负数是奇数,n的值是偶数,然后从和中减去m的两倍,这将是数组的最大和,否则,sum的值将是数组的最大和
重复上述步骤(2*n–1)次
示例
现在让我们看一个例子-
#include <bits/stdc++.h> using namespace std; int getMaxSum(int *arr, int n) { int negtiveCnt = 0; int sum = 0; int m = INT_MAX; for (int i = 0; i < 2 * n - 1; ++i) { if (arr[i] < 0) { ++negtiveCnt; } sum = sum + abs(arr[i]); m = min(m, abs(arr[i])); } if (negtiveCnt % 2 && n % 2 == 0) { sum = sum - 2 * m; return sum; } return sum; } int main() { int arr[] = {-2, 100, -3}; int n = 2; cout << "Maximum sum = " << getMaxSum(arr, n) << endl; return 0; }
输出结果
Maximum sum = 105