কম্পিউটার

C++ এ একটি প্রদত্ত মানের k নিকটতম উপাদান খুঁজুন


আমরা কয়েকটি উপাদান সহ একটি অ্যারে A আছে বিবেচনা করুন. আমাদের আরও দুটি মান X এবং k আছে। আমাদের কাজ হল অ্যারে থেকে X এর নিকটতম উপাদানগুলির k সংখ্যা খুঁজে বের করা। যদি অ্যারেতে X উপাদানটি উপস্থিত থাকে, তবে এটি আউটপুটে দেখানো হবে না। যদি A =[12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56] এবং X =35, k =4. আউটপুট হবে 30, 39, 42, 45 .

এটি সমাধান করার জন্য, আমরা বাইনারি অনুসন্ধান পদ্ধতি ব্যবহার করব। এটি ব্যবহার করে আমরা ক্রসওভার পয়েন্ট পাব। যদি ক্রসওভার পয়েন্টের সূচক পাওয়া যায়, আমরা O(k) সময়ে k- নিকটতম উপাদানগুলি প্রিন্ট করতে পারি।

উদাহরণ

#include<iostream>
using namespace std;
int getCrossoverPoint(int arr[], int left, int right, int x) {
   if (arr[right] <= x)
      return right;
   if (arr[left] > x)
      return left;
      int mid = (left + right)/2;
   if(arr[mid] <= x && arr[mid+1] > x)
      return mid;
   if(arr[mid] < x)
      return getCrossoverPoint(arr, mid+1, right, x);
      return getCrossoverPoint(arr, left, mid - 1, x);
}
void findKClosestNumbers(int arr[], int x, int k, int n) {
   int l = getCrossoverPoint(arr, 0, n-1, x);
   int r = l+1;
   int count = 0;
   if (arr[l] == x) l--;
      while (l >= 0 && r < n && count < k) {
         if (x - arr[l] < arr[r] - x)
            cout << arr[l--] << " ";
         else
            cout << arr[r++] << " ";
            count++;
      }
      while (count < k && l >= 0){
         cout << arr[l--] << " ";
         count++;
      }
      while (count < k && r < n){
         cout << arr[r++] << " ";
         count++;
      }
}
int main() {
   int arr[] ={12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56};
   int n = sizeof(arr)/sizeof(arr[0]);
   int x = 35, k = 5;
   findKClosestNumbers(arr, x, k, n);
}

আউটপুট

39 30 42 45 48

  1. C++ এ একটি অ্যারেতে ক্ষুদ্রতম মানের ফ্রিকোয়েন্সি খুঁজুন

  2. C++ এ অ্যারের প্রতিটি উপাদানের জন্য নিকটতম মান খুঁজুন

  3. C++-এ অ্যারের প্রতিটি উপাদানের জন্য নিকটতম বৃহত্তর মান খুঁজুন

  4. C++ এ প্রদত্ত অ্যারের উপাদানগুলির ফ্যাক্টোরিয়ালের GCD খুঁজুন