কম্পিউটার

C++ এ H-সূচক II


ধরুন আমাদের কাছে একজন গবেষকের উদ্ধৃতিগুলির একটি অ্যারে (উদ্ধৃতিগুলি অ-নেতিবাচক পূর্ণসংখ্যা) রয়েছে। এই সংখ্যাগুলি হ্রাস না হওয়া ক্রমে সাজানো হয়েছে। গবেষকের এইচ-ইনডেক্স গণনা করার জন্য আমাদের একটি ফাংশন সংজ্ঞায়িত করতে হবে। h-সূচকের সংজ্ঞা অনুসারে:"একজন বিজ্ঞানীর সূচক h আছে যদি তার/তার N কাগজপত্রগুলির প্রতিটিতে কমপক্ষে h উদ্ধৃতি থাকে এবং অন্য N −h কাগজগুলির প্রতিটিতে h উদ্ধৃতির বেশি না থাকে।"

সুতরাং যদি ইনপুটটি উদ্ধৃতি =[0,1,4,5,6] এর মত হয়, তাহলে আউটপুট হবে 3, কারণ এটি নির্দেশ করে যে গবেষকের পাঁচটি গবেষণাপত্র রয়েছে, তারা 0, 1, 4, 5, 6টি উদ্ধৃতি পেয়েছে যথাক্রমে যেহেতু গবেষকের 3টি পেপার রয়েছে যার প্রতিটিতে কমপক্ষে 4টি উদ্ধৃতি রয়েছে এবং বাকি দুটি পেপারে 4টির বেশি উদ্ধৃতি নেই, তাহলে h-সূচকটি 3টি৷

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

  • উত্তর :=0, নিম্ন :=0, n :=অ্যারের আকার, উচ্চ :=n – 1

  • যদি অ্যারের আকার =0, তাহলে 0

    ফেরত দিন
  • যখন কম <=উচ্চ −

    • মধ্য :=নিম্ন + (উচ্চ - নিম্ন)/2

    • যদি A[mid] =অ্যারের আকার – mid, তাহলে A[mid]

      ফেরত দিন
    • অন্যথায় যখন A[mid]> n – mid, তারপর high :=mid – 1

    • অন্যথায় কম :=মধ্য + 1

  • রিটার্ন n – উচ্চ – 1

উদাহরণ(C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int hIndex(vector<int>& A) {
      int ans = 0;
      int low = 0;
      int n = A.size();
      int high = n - 1;
      if(A.size() == 0) return 0;
      while(low <= high){
         int mid = low + (high - low) / 2;
         if(A[mid] == A.size() - mid){
            return A[mid];
         }
         else if(A[mid] > (n - mid)){
            high = mid - 1;
         }
         else low = mid + 1;
      }
      return n - (high + 1);
   }
};
main(){
   Solution ob;
   vector<int> v = {0,1,4,5,7};
   cout << (ob.hIndex(v));
}

ইনপুট

[0,1,4,5,6]

আউটপুট

3

  1. C++ Enum

  2. বিবৃতি সি++ পরিবর্তন করুন

  3. C++ এ মিতব্যয়ী নম্বর

  4. C++ পেন্টাটোপ নম্বর