সমস্যা বিবৃতি
n ধনাত্মক পূর্ণসংখ্যা এবং একটি সংখ্যা k এর একটি অ্যারে দেওয়া হয়েছে। k-এর থেকে কম বা সমান সমস্ত সংখ্যা একসাথে আনতে প্রয়োজনীয় ন্যূনতম সংখ্যক অদলবদল খুঁজুন।
উদাহরণ
যদি ইনপুট অ্যারে ={1, 5, 4, 7, 2, 10} এবং k =6 হয়, তাহলে 1 অদলবদল প্রয়োজন, অর্থাৎ 2 এর সাথে সোয়াপ উপাদান 7।
অ্যালগরিদম
- সমস্ত উপাদান গণনা করুন যা 'k' এর থেকে কম বা সমান। ধরা যাক গণনা হল 'cnt'
- 'cnt' দৈর্ঘ্যের উইন্ডোর জন্য দুটি পয়েন্টার কৌশল ব্যবহার করে, প্রতিবার এই পরিসরে কতগুলি উপাদান 'k'-এর থেকে বড় তা ট্র্যাক করুন। ধরা যাক মোট গণনা হল 'outOfRange'৷ ৷
- প্রত্যেক দৈর্ঘ্যের 'cnt' উইন্ডোর জন্য ধাপ 2 পুনরাবৃত্তি করুন এবং তাদের মধ্যে ন্যূনতম গণনা 'outOfRange' নিন। এটাই হবে চূড়ান্ত উত্তর।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int getMinSwaps(int *arr, int n, int k) { int cnt = 0; for (int i = 0; i < n; ++i) { if (arr[i] <= k) { ++cnt; } } int outOfRange = 0; for (int i = 0; i < cnt; ++i) { if (arr[i] > k) { ++outOfRange; } } int result = outOfRange; for (int i = 0, j = cnt; j < n; ++i, ++j) { if (arr[i] > k) { --outOfRange; } if (arr[j] > k) { ++outOfRange; } result = min(result, outOfRange); } return result; } int main() { int arr[] = {1, 5, 4, 7, 2, 10}; int n = sizeof(arr) / sizeof(arr[0]); int k = 6; cout << "Minimum swaps = " << getMinSwaps(arr, n, k) << endl; return 0; }
আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −
তৈরি করেআউটপুট
Minimum swaps = 1