আমাদের একটি ইন্টিজার অ্যারে arr[] এবং একটি পজিটিভ ইন্টিজার k দেওয়া আছে। কাজ হল অ্যারেতে jene যেগুলোর অ্যাবসোলিউট ডিফারেন্স (absolute difference) k-র চেয়ে ছোট বা সমান, সেই এলিমেন্ট পেয়ারের (বা সাবসেটের) সর্বোচ্চ সংখ্যা বের করা।
উদাহরণ:
ইনপুট: arr[] = {2, 3, 6, 12, 14}, k = 5 → আউটপুট: count is: 3 (সাবসেট: {2, 3, 6})
ইনপুট: arr[] = {2, 3, 6, 12, 14}, k = 10 → আউটপুট: count is: 4 (সাবসেট: {2, 3, 6, 12})
ইনপুট: arr[] = {2, 3, 6, 12, 14}, k = 0 → আউটপুট: count is: 0
অ্যালগরিদম (স্লাইডিং উইন্ডো অন সোর্টেড অ্যারে)
অ্যারে সর্ট করুন
দুটি পয়েন্টার i, j = 0 দিয়ে শুরু করুন
i = 0 থেকে n-1 পর্যন্ত: j বাড়াতে থাকুন যতক্ষণ arr[j] <= arr[i] + k
ম্যাক্সimum (j - i) ট্র্যাক করুন
ফলাফল রিটার্ন করুন
প্রোগ্রাম
#include <iostream>
#include <algorithm>
using namespace std;
int countmax(int arr[], int size, int K) {
int result = 0;
int i = 0, j = 0;
sort(arr, arr + size);
for (i = 0; i < size; i++) {
while (j < size && arr[j] <= arr[i] + K) j++;
if (result < (j - i)) result = (j - i);
}
return result;
}
int main() {
int arr[] = { 2, 3, 6, 12, 14 };
int size = sizeof(arr) / sizeof(arr[0]);
int K = 5;
cout << "count is " << countmax(arr, size, K) << endl;
return 0;
}
আউটপুট
count is 3