আমাদের একটি যেকোনো আকারের অ্যারে দেওয়া আছে এবং কাজ হলো সেই অ্যারেতে এমন একটি সাবঅ্যারে খুঁজে বের করা যেন সংলগ্ন উপাদানগুলির পার্থক্য 0 বা 1 হয়।
উদাহরণ
ইনপুট: int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6}
আউটপুট: সংলগ্ন উপাদানগুলির পার্থক্য 0 বা 1 থাকা সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে - 2
ব্যাখ্যা: পার্থক্য 0 বা 1 থাকা সংলগ্ন উপাদানগুলির সাবঅ্যারে গুলো হলো {2, 1}, {5, 6}, {3, 4} এবং {7, 6}। অতএব সর্বোচ্চ দৈর্ঘ্য 2।
ইনপুট: int arr[] = { 2, 1, 7, 6, 5}
আউটপুট: সংলগ্ন উপাদানগুলির পার্থক্য 0 বা 1 থাকা সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে - 3
ব্যাখ্যা: পার্থক্য 0 বা 1 থাকা সংলগ্ন উপাদানগুলির সাবঅ্যারে গুলো হলো {2, 1} এবং {7, 6, 5}। অতএব সর্বোচ্চ দৈর্ঘ্য 3।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- পজিটিভ এবং নেগেটিভ উভয় উপাদান ধারণকারী একটি ইন্টিজার অ্যারে ইনপুট নেওয়া।
- অ্যারের আকার নির্ণয় করে অ্যারেটি এবং আকার ফাংশনে পাস করা।
- টেম্পোরারি ভেরিয়েবল i = 0 এবং maximum = 0 ইনিশিয়ালাইজ করা।
- while লুপ i < size পর্যন্ত চালানো।
- লুপের ভেতরে j = i সেট করা।
- আরেকটি while লুপ যেটি সংলগ্ন উপাদানগুলির পার্থক্য 0 বা 1 কিনা তা চেক করে।
- i ইনক্রিমেন্ট করা।
- temp = i - j + 1 ক্যালকুলেট করা।
- যদি maximum < temp হয় তবে maximum আপডেট করা।
- যদি j == i হয় তবে i ইনক্রিমেন্ট করা।
- maximum রিটার্ন করা।
- ফলাফল প্রিন্ট করা।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int maximum_diff(int arr[], int size){
int i = 0;
int maximum = 0;
while (i < size){
int j = i;
while (i+1 < size && (abs(arr[i] - arr[i + 1]) == 1 || abs(arr[i] - arr[i + 1]) == 0)){
i++;
}
int temp = i - j + 1;
if (maximum < temp){
maximum = temp;
}
if(j == i){
i++;
}
}
return maximum;
}
int main(){
int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Maximum length subarray with difference between adjacent elements as either 0 or 1 are: " << maximum_diff(arr, size);
return 0;
}
আউটপুট
Maximum length subarray with difference between adjacent elements as either 0 or 1 are: 2