কম্পিউটার টিউটোরিয়াল

C++-এ H-ইন্ডেক্স II



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

উদাহরণ: citations = [0,1,4,5,6] হলে আউটপুট ৩। কারণ ৫ টি পেপার, সাইটেশন ০,১,৪,৫,৬। গবেষকের ৩ টি পেপারে কমপক্ষে ৪ সাইটেশন, বাকি ২ টিতে সর্বোচ্চ ৪ সাইটেশন, তাই h-ইন্ডেক্স ৩।

সমাধানের ধাপগুলো:

  • ans := 0, low := 0, n := A.size(), high := n-1
  • যদি A.size() == 0, ০ ফেরত দিন।
  • low <= high रहने পর্যন্ত:
    • mid := low + (high - low)/2
    • যদি A[mid] == A.size() - mid, A[mid] ফেরত দিন।
    • অন্যথায় যদি A[mid] > n - mid, high := mid - 1
    • অন্যথায় low := mid + 1
  • n - high - 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. C++-এ Switch Statement: ব্যবহার করার পদ্ধতি

  3. Frugal সংখ্যা চেক করা (C++)

  4. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা