Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 연산으로 배열 합 최대화하기

<시간/>

설명

(2 * n – 1)개의 정수 배열이 있습니다. 배열에서 정확히 n개 요소의 부호를 변경할 수 있습니다. 즉, 정확히 n개의 배열 요소를 선택하고 각각에 -1을 곱할 수 있습니다. 배열의 최대 합을 찾습니다.

예시

입력 배열이 {-2, 100, -3}이면 -2와 -3의 최대 변화 부호를 얻을 수 있습니다. 부호 배열을 변경하면 -

가 됩니다.

{2, 100, 3}이고 이 배열의 최대 합은 105입니다.

알고리즘

  • 음수 계산
  • 숫자의 절대값을 취하여 배열의 합을 계산합니다.
  • 숫자의 절대값을 취하여 배열의 최소값 찾기
  • 아니오인지 확인하십시오. 음수의 값은 홀수이고 n의 값은 짝수이며 합계에서 m의 두 배를 빼면 이것이 배열의 최대 합이 됩니다. 그렇지 않으면 합계의 값은 배열의 최대 합이 됩니다.
  • 위의 단계를 (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