কম্পিউটার

C++ এ K নিকটতম উপাদান খুঁজুন


ধরুন আমাদের একটি সাজানো অ্যারে আছে, দুটি পূর্ণসংখ্যা k এবং xও দেওয়া আছে, আমাদের সেই অ্যারেতে x-এর নিকটতম উপাদানগুলি খুঁজে বের করতে হবে। ফলাফল ক্রমবর্ধমান ক্রমে সাজানো উচিত. যদি টাই থাকে তবে ছোট উপাদানগুলি সর্বদা পছন্দ করা হয়। সুতরাং ইনপুট যদি হয় [1,2,3,4,5] এবং k =4, x =3, তাহলে আউটপুট হবে [1,2,3,4]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ans নামে একটি অ্যারে তৈরি করুন
  • নিম্ন সেট করুন :=0, উচ্চ :=অ্যারের আকার – k
  • যদিও কম <উচ্চ
    • মধ্য :=নিম্ন + (উচ্চ - নিম্ন) /2
    • যদি x – arr[mid]> arr[mid + k] – x, তারপর low :=mid + 1, অন্যথায় high :=mid
  • আমি নিম্ন থেকে নিম্ন + k
      পরিসরে
    • ans অ্যারেতে arr[i] ঢোকান
  • উত্তর ফেরত দিন

উদাহরণ(C++)

আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
cout << "]"<<endl;
}
class Solution {
public:
   vector<int> findClosestElements(vector<int>& arr, int k, int x) {
      vector <int> ans;
      int low = 0;
      int high = arr.size() - k;
      while(low < high){
         int mid = low + (high - low)/2;
         if(x - arr[mid] > arr[mid + k] - x){
            low = mid + 1;
         }
         else high = mid;
      }
      for(int i = low ; i < low + k ; i++)ans.push_back(arr[i]);
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5};
   print_vector(ob.findClosestElements(v, 4, 3));
}

ইনপুট

[1,2,3,4,5]
4
3

আউটপুট

[1,2,3,4]

  1. C++ এ দূষিত বাইনারি ট্রিতে উপাদান খুঁজুন

  2. C++-এ নিকটতম এবং ছোট পরিপাটি সংখ্যা খুঁজুন

  3. C++ এ একটি বাইনারি গাছের নিকটতম পাতাটি খুঁজুন

  4. C++-এ K উৎপত্তির নিকটতম পয়েন্ট খুঁজুন