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