C++ 中允许使用负数的情况下,数组中成对乘积的最大和


在本教程中,我们将讨论一个程序,该程序用于在允许使用负数的情况下,寻找数组中成对乘积的最大和。

为此,我们将得到一个包含整数的数组。我们的任务是查找在执行成对乘法时的最大和。

示例

 现场演示

#include <bits/stdc++.h>
#define Mod 1000000007
using namespace std;
//finding the maximum sum
long long int findSum(int arr[], int n) {
   long long int sum = 0;
   //sorting the array
   sort(arr, arr + n);
   int i = 0;
   while (i < n && arr[i] < 0) {
      if (i != n - 1 && arr[i + 1] <= 0) {
         sum = (sum + (arr[i] * arr[i + 1]) % Mod) % Mod;
         i += 2;
      }
      else
         break;
   }
   int j = n - 1;
   while (j >= 0 && arr[j] > 0) {
      if (j != 0 && arr[j - 1] > 0) {
         sum = (sum + (arr[j] * arr[j - 1]) % Mod) % Mod;
         j -= 2;
      }
      else
         break;
   }
   if (j > i)
      sum = (sum + (arr[i] * arr[j]) % Mod) % Mod;
   else if (i == j)
      sum = (sum + arr[i]) % Mod;
   return sum;
}
int main() {
   int arr[] = { -1, 9, 4, 5, -4, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << findSum(arr, n);
   return 0;
}

输出

87

更新于: 09-Sep-2020

135 次浏览

开启你的 职业

完成课程获得认证

开始
广告