একটি পূর্ণসংখ্যার অ্যারে দেওয়া আছে যেখানে একই উপাদান একাধিকবার রয়েছে। কাজটি হলো অ্যারেতে যেকোনো একই উপাদানের দুটি ঘটনার মধ্যে সর্বোচ্চ দূরত্ব (ইন্ডেক্স পার্থক্য) খুঁজে বের করা।
উদাহরণ
ইনপুট: Arr[] = { 1, 2, 4, 1, 3, 4, 2, 5, 6, 5 }
আউটপুট: একই উপাদানের দুটি ঘটনার মধ্যে সর্বোচ্চ দূরত্ব - 4
ব্যাখ্যা: পুনরাবৃত্তি সংখ্যাগুলো ও তাদের ইনডেক্স:
১. ১: প্রথম ইনডেক্স ০, শেষ ইনডেক্স ৩ → দূরত্ব = ৩-০-১ = ২ ২. ২: প্রথম ইনডেক্স ১, শেষ ইনডেক্স ৬ → দূরত্ব = ৬-১-১ = ৪ ৩. ৫: প্রথম ইনডেক্স ৭, শেষ ইনডেক্স ৯ → দূরত্ব = ৯-৭-১ = ১ সর্বোচ্চ দূরত্ব = ৪
ইনপুট: Arr[] = { 10, 20, 1, 10, 10, 21, 12, 0 }
আউটপুট: ৩
নোট: যদি অ্যারেতে কোনো পুনরাবৃত্তি সংখ্যা না থাকে, তবে -1 রিটার্ন করবে।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- পুনরাবৃত্তি সংখ্যা ধারণকারী অ্যারে Arr[] নেওয়া হয়েছে।
- maxDistance(int arr[], int n) ফাংশনটি সর্বোচ্চ দূরত্ব গণনা করে।
- maxD = -1 দিয়ে ইনিশিয়ালাইজ।
- দুটি নেস্টেড লুপ দিয়ে সব জোড়া (i, j) চেক করা হয়।
- যদি arr[i] == arr[j] হয়, তবে দূরত্ব = j - i - 1 হিসাব করা হয়।
- এই মান maxD-এय़ বড় হলে maxD আপডেট করা হয়।
- শেষে maxD রিটার্ন করা হয়।
C প্রোগ্রাম উদাহরণ
#include <stdio.h>
#include <math.h>
int maxDistance(int arr[], int n) {
int maxD = -1;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (arr[i] == arr[j]) {
int temp = abs(j - i - 1);
maxD = maxD > temp ? maxD : temp;
}
return maxD;
}
int main() {
int Arr[] = {1, 2, 4, 1, 3, 4, 2, 5, 6, 5};
printf("একই উপাদানের দুটি ঘটনার মধ্যে সর্বোচ্চ দূরত্ব: %d", maxDistance(Arr, 10));
return 0;
}
আউটপুট
একই উপাদানের দুটি ঘটনার মধ্যে সর্বোচ্চ দূরত্ব - 4