通过在C ++中重复给定数组k次而形成的数组中的最大子数组总和

在这个问题上,我们得到一个数组和一个数字k。我们的任务是创建一个程序,该程序将在c ++中通过重复给定数组k次而在数组中找到最大子数组和。

问题描述-在这里,我们将找到通过重复k次给定数组而形成的数组所形成的子数组的最大和。

让我们举个例子来了解这个问题,

输入-数组= {3,5,1} k = 2

输出-18

说明-

array formed by repeating k times,
array = {3, 5, 1, 3, 5, 1}
Maximum subarray sum = 3+5+1+3+5+1 = 18

为了解决这个问题,我们将计算数组所有元素的总和。

然后,基于总和,我们将计算子数组的总和。

如果sum> 0,我们将乘以数组k的总和乘以给出的实际总和。

如果sum <0,我们将发现maxSum带有两个重复数组的子数组。

示例

显示我们解决方案实施情况的程序,

#include<iostream>
using namespace std;
void repeatArray(int *arr, int *b, int k,int len) {
   int j = 0;
   while (k > 0){
      for (int i = 0; i < len; i++)
      b[j++] = arr[i];
      k--;
   }
}
long subArraySum(int *a,int len) {
   int max = 0;
   long newmax = 0;
   for (int i = 0; i < len; i++) {
      newmax = newmax + a[i];
   if (max < newmax)
      max = newmax;
   if (newmax < 0)
      newmax = 0;
   }
   return max;
}
long findMaxSubArraySum(int *arr, int k,int len) {
   int arraySum = 0;
   long maxSum = 0;
   int b[(2 * len)]= {0};
   repeatArray(arr, b, 2,len);
   for (int i = 0; i < len; i++)
   arraySum += arr[i];
   maxSum = subArraySum(b,2*len);
   if (arraySum > 0)
      maxSum = subArraySum(b,2*len) + (k - 2) * arraySum;
   return maxSum;
}
int main() {
   int arr[] = { 3, 5, 1};
   int length=sizeof(arr)/sizeof(arr[0]);
   int k = 3;
   cout<<"The maximum subarray sum in array formed by repeating the given array "<<k<<" times is "<<findMaxSubArraySum(arr, k,length);
   return 0;
}

输出结果

The maximum subarray sum in array formed by repeating the given array 3 times is 27