इस समस्या में, हमें एक सरणी और एक संख्या k दी जाती है। हमारा काम एक प्रोग्राम बनाना है जो दिए गए सरणी k समय को c ++ में दोहराकर बनाई गई सरणी में अधिकतम सबएरे योग ढूंढेगा।
समस्या का विवरण - यहां, हम दिए गए एरे को 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 इस समस्या को हल करने के लिए, हम सरणी के सभी तत्वों के योग की गणना करेंगे।
फिर योग के आधार पर, हम सबअरे योग गणना की गणना करेंगे।
यदि योग> 0 है, तो हम सरणी के योग को k गुणा करेंगे, जो वास्तविक योग देता है।
यदि योग <0 है, तो हम दो सरणी दोहराव लेते हुए मैक्ससम के साथ उप-सरणी पाएंगे।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
#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