কম্পিউটার

C++-এ k-এর থেকে কম বা সমান সমস্ত উপাদান একসঙ্গে আনতে ন্যূনতম অদলবদল প্রয়োজন


সমস্যা বিবৃতি

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

  1. C++ এ একটি মিন হিপে x মানের চেয়ে কম সব নোড প্রিন্ট করুন

  2. C++ ব্যবহার করে অ্যারের সমস্ত উপাদান মুছে ফেলার জন্য ন্যূনতম সংখ্যক অপারেশন প্রয়োজন।

  3. C++ ব্যবহার করে সমস্ত উপাদানকে সমান করতে ন্যূনতম সংখ্যা।

  4. C++ এ n এর থেকে কম বা সমান সমস্ত ফ্যাক্টরিয়াল সংখ্যা খুঁজুন