আমাদের একটি অ্যারে Arr[] দেওয়া আছে। লক্ষ্য হল Arr[]-এর সবচেয়ে দীর্ঘ দৈর্ঘ্যের সাবঅ্যারে খুঁজে বের করা যেন সেই সাবঅ্যারের উপাদানগুলোর যোগফল জোড় হয়। অর্থাৎ, একটি সাবঅ্যারের উপাদানগুলোর যোগফল জোড় এবং সেই সাবঅ্যারেটিই দৈর্ঘ্যে সর্বোচ্চ।
উদাহরণ দিয়ে বোঝা যাক
ইনপুট - Arr[] = { 2,3,5,2,6,7 }
আউটপুট - সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য - ৪
ব্যাখ্যা - সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে হল { 5,2,6,7 }। যোগফল ২০ যা জোড়।
ইনপুট - Arr[] = { 5,7,7,3,4 }
আউটপুট - সাবঅ্যারের সর্বোচ্চ দৈর্ঘ্য - ৪
ব্যাখ্যা - সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে হল { 5,7,7,3 }। যোগফল ২২ যা জোড়।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
ইন্টিজার অ্যারে Arr[] ব্যবহার করা হয়েছে ইন্টিজার সংরক্ষণের জন্য।
size ভেরিয়েবল ব্যবহার করা হয়েছে অ্যারের দৈর্ঘ্য সংরক্ষণের জন্য।
Length( int arr[] ) ফাংশন অ্যারের যোগফল জোড় কিনা চেক করে। Leng ভেরিয়েবল সাবঅ্যারের দৈর্ঘ্য সংরক্ষণ করে।
পুরো অ্যারের যোগফল বের করুন, যদি জোড় হয় তবে অ্যারের দৈর্ঘ্য n ফেরত দিন।
এখন প্রথম উপাদান থেকে পুরো অ্যারে ট্রাভার্স করুন, যদি কোনো বিজোড় উপাদান পাওয়া যায় তবে arr[i] বাদ দিয়ে দুটি অর্ধেকের দৈর্ঘ্য তুলনা করুন।
সাবঅ্যারের দৈর্ঘ্যের জন্য সর্বোচ্চ দৈর্ঘ্য ফেরত দিন।
C++ প্রোগ্রাম উদাহরণ
#include<iostream>
int Length(int arr[], int n){
int sum = 0, leng = 0;
// পুরো অ্যারে জোড় হলে
for (int i = 0; i < n; i++)
sum += arr[i];
if (sum % 2 == 0) // মোট যোগফল ইতিমধ্যে জোড়
return n;
// এমন একটি ইনডেক্স i খুঁজুন যাতে a[i] বিজোড়
// এবং arr[i] বাদ দিয়ে দুটি অর্ধেকের দৈর্ঘ্য তুলনা করে
// সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে বের করুন
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 1)
leng = i>n-i-1?i:n-i-1;
}
return leng;
}
int main(){
int Arr[] = { 1, 2, 6, 2, 4,2 };
int size = 6;
printf("Maximum length of subarray such that sum of the subarray is even: %d",Length(Arr, size));
return 0;
}
আউটপুট
Maximum length of subarray such that sum of the subarray is even : 5