কম্পিউটার টিউটোরিয়াল

দেওয়া অ্যারেকে k বার রিপিট করে তৈরি অ্যারেতে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

সমস্যা বিবরণ

একটি অ্যারে এবং একটি সংখ্যা k দেওয়া আছে। দেওয়া অ্যারেকে k বার রিপিট করে একটি নতুন অ্যারে তৈরি করতে হবে এবং সেটি থেকে সর্বোচ্চ সাবঅ্যারে যোগফল বের করতে হবে।

উদাহরণ

ইনপুট - অ্যারে = {3, 5, 1}, k = 2

আউটপুট - 18

ব্যাখ্যা -

k বার রিপিট করলে অ্যারে = {3, 5, 1, 3, 5, 1} 
সর্বোচ্চ সাবঅ্যারে যোগফল = 3+5+1+3+5+1 = 18

সমাধানের পদ্ধতি

প্রথমে অ্যারের সব এলিমেন্টের যোগফল বের করুন। তারপর যোগফলের চিহ্ন অনুযায়ী সাবঅ্যারে যোগফল নির্ণয় করুন:

  • যদি যোগফল > 0 হয়, তবে পুরো অ্যারের যোগফলকে k দিয়ে গুণ করুন।
  • যদি যোগফল < 0 হয়, তবে দুটি অ্যারে রিপিট করে সর্বোচ্চ সাবঅ্যারে যোগফল বের করুন।

C++ কোড উদাহরণ

#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
  1. দেওয়া অ্যারেকে k বার রিপিট করে তৈরি অ্যারেতে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  2. সর্বোচ্চ k সংখ্যক এলিমেন্টের চিহ্ন ফ্লিপ করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  3. C++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল

  4. C++-এ দেয়া অ্যারে থেকে সর্বোচ্চ উচ್ಚতার পিরামিড বের করুন