使用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