ধরুন আমাদের কাছে একজন গবেষকের উদ্ধৃতির একটি অ্যারে আছে। গবেষকের এইচ-ইনডেক্স গণনা করার জন্য আমাদের একটি ফাংশন সংজ্ঞায়িত করতে হবে। আমরা জানি যে এইচ-ইনডেক্স হল একটি মেট্রিক যা একজন গবেষকের কাগজপত্রের প্রভাব গণনা করতে ব্যবহৃত হয়। আনুষ্ঠানিকভাবে H-সূচককে এইভাবে সংজ্ঞায়িত করা যেতে পারে:"একজন গবেষকের সূচক h থাকে যদি তাদের N কাগজগুলির প্রতিটিতে কমপক্ষে h উদ্ধৃতি থাকে এবং অন্য N −h কাগজগুলির প্রতিটিতে h উদ্ধৃতির বেশি না থাকে।"
সুতরাং, যদি ইনপুটটি উদ্ধৃতির মত হয় =[5, 4, 1, 2, 6], তাহলে আউটপুট হবে 3, কারণ কমপক্ষে 3টি পেপারে অন্তত 3টি উদ্ধৃতি রয়েছে −4, 5, 6।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার, n + 1 আকারের বালতি নামে একটি অ্যারে তৈরি করুন
- আমি 0 থেকে n – 1
- পরিসরে
- x :=c[i]
- যদি x>=n, তাহলে বালতি[n] 1 দ্বারা বাড়ান, অন্যথায় বালতি[x] 1 দ্বারা বাড়ান
- cnt :=0
- এর জন্য আমি 0 থেকে নিচের রেঞ্জে:
- বালতি দ্বারা cnt বাড়ান[i]
- যদি cnt>=i, তাহলে i ফেরত দিন
- রিটার্ন - 1
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(vector<int>& c) {
int n = c.size();
vector <int> bucket(n + 1);
for(int i = 0; i < n; i++){
int x = c[i];
if(x >= n){
bucket[n]++;
} else {
bucket[x]++;
}
}
int cnt = 0;
for(int i = n; i >= 0; i--){
cnt += bucket[i];
if(cnt >= i)return i;
} return -1;
}
};
main(){
Solution ob;
vector<int> v = {5, 4, 1, 2, 6};
cout << (ob.solve(v));
} ইনপুট
[5, 4, 1, 2, 6]
আউটপুট
3