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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP