मान लीजिए कि हमारे पास एक शोधकर्ता के उद्धरणों की एक सरणी है। हमें शोधकर्ता के एच-इंडेक्स की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना होगा। जैसा कि हम जानते हैं कि एच-इंडेक्स एक मीट्रिक है जिसका उपयोग शोधकर्ता के कागजात के प्रभाव की गणना के लिए किया जाता है। औपचारिक रूप से एच-इंडेक्स को इस प्रकार परिभाषित किया जा सकता है:"एक शोधकर्ता के पास इंडेक्स एच होता है यदि उनके एन पेपर्स में से प्रत्येक में कम से कम एच उद्धरण होते हैं, और अन्य एन-एच पेपर में एच उद्धरण से अधिक नहीं होते हैं।"
इसलिए, यदि इनपुट उद्धरणों की तरह है =[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 से बढ़ा दें
- सीएनटी:=0
- मैं के लिए n से 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