मान लीजिए कि हमारे पास एक शोधकर्ता के उद्धरणों की एक श्रृंखला है (उद्धरण गैर-ऋणात्मक पूर्णांक हैं)। हमें शोधकर्ता के एच-इंडेक्स की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना होगा। एच-इंडेक्स की परिभाषा के अनुसार:"एक वैज्ञानिक के पास इंडेक्स एच होता है यदि उसके एन पेपर में से प्रत्येक में कम से कम एच उद्धरण होते हैं, और अन्य एन-एच पेपर में एच उद्धरण से अधिक नहीं होते हैं।"
तो अगर इनपुट उद्धरणों की तरह है =[3,0,6,1,7], तो आउटपुट 3 होगा, क्योंकि यह इंगित करता है कि शोधकर्ता के पास पांच पेपर हैं, उन्हें 3, 0, 6, 1, 7 उद्धरण मिले हैं क्रमश। चूंकि शोधकर्ता के पास कम से कम 3 उद्धरणों के साथ 3 पेपर हैं और शेष दो पेपर में 3 से अधिक उद्धरण नहीं हैं, तो एच-इंडेक्स 3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=सरणी का आकार, n + 1 के आकार की बकेट नामक एक सरणी बनाएं
-
मैं के लिए 0 से n - 1 की सीमा में
-
एक्स:=सी[i]
-
अगर x>=n, तो बकेट[n] को 1 से बढ़ा दें, नहीं तो बकेट[x] को 1 से बढ़ा दें
-
-
सीएनटी:=0
-
n से 0 तक की श्रेणी में i के लिए -
-
बाल्टी द्वारा cnt बढ़ाएं[i]
-
अगर cnt>=i, तो i
. लौटाएं
-
-
वापसी - 1
उदाहरण(C++)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int hIndex(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 = {3,0,6,1,7};
cout << (ob.hIndex(v));
} इनपुट
[3,0,6,1,7]
आउटपुट
3