C++ 中两个不同数组中子数组或总和的最大值


问题表述

给定两个正整数数组。从各数组中选择两个大小相等的子数组,并计算两个子数组的或运算和的最大可能值。

示例

如果 arr1[] = {1, 2, 4, 3, 2} 和

Arr2[] = {1, 3, 3, 12, 2} 那么当我们创建以下两个子数组时,会得到最大结果 −

Subarr1[] = {2, 4, 3} 和

Subarr2[] = {3, 3, 12}

算法

我们可使用以下公式得到结果 −

f(a, 1, n) + f(b, 1, n)

示例

 实时演示

#include <bits/stdc++.h>
using namespace std;
int getMaximumSum(int *arr1, int *arr2, int n) {
   int sum1 = 0;
   int sum2 = 0;
   for (int i = 0; i < n; ++i) {
      sum1 = sum1 | arr1[i];
      sum2 = sum2 | arr2[i];
   }
   return sum1 + sum2;
}
int main() {
   int arr1[] = {1, 2, 4, 3, 2};
   int arr2[] = {1, 3, 3, 12, 2};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   cout << "Maximum result = " << getMaximumSum(arr1, arr2, n) << endl;
   return 0;
}

输出

当你编译并执行以上程序时。它将生成以下输出 −

Maximum result = 22

更新于: 10-Jan-2020

159 次浏览

开启您的 事业

完成课程以获得认证

开始
广告
© . All rights reserved.