मान लीजिए कि हमारे पास एक शोधकर्ता के उद्धरणों की एक सरणी है (उद्धरण गैर-ऋणात्मक पूर्णांक हैं)। इन नंबरों को गैर-घटते क्रम में क्रमबद्ध किया जाता है। हमें शोधकर्ता के एच-इंडेक्स की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना होगा। एच-इंडेक्स की परिभाषा के अनुसार:"एक वैज्ञानिक के पास इंडेक्स एच होता है यदि उसके एन पेपर में से प्रत्येक में कम से कम एच उद्धरण होते हैं, और अन्य एन-एच पेपर में एच उद्धरण से अधिक नहीं होते हैं।"
तो अगर इनपुट उद्धरणों की तरह है =[0,1,4,5,6], तो आउटपुट 3 होगा, क्योंकि यह इंगित करता है कि शोधकर्ता के पास पांच पेपर हैं, उन्हें 0, 1, 4, 5, 6 उद्धरण मिले हैं क्रमश। चूंकि शोधकर्ता के पास कम से कम 4 उद्धरणों के साथ 3 पेपर हैं और शेष दो पेपर में प्रत्येक में 4 से अधिक उद्धरण नहीं हैं, तो एच-इंडेक्स 3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर:=0, निम्न:=0, एन:=सरणी का आकार, उच्च:=n - 1
-
यदि सरणी का आकार =0 है, तो 0 पर लौटें
-
जबकि कम <=उच्च -
-
मध्य :=निम्न + (उच्च-निम्न)/2
-
अगर ए [मध्य] =सरणी का आकार - मध्य, फिर ए [मध्य]
-
अन्यथा जब A[मध्य]> n – मध्य, फिर उच्च :=मध्य – 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