Table of Contents
Problem Statement:
H-Index Leetcode solution says that – Given an array of integers “citations” where citations[i] is the number of citations a researcher received for their ith paper, return researcher’s H-Index. If several H-Index values are present, return the maximum among them.
Definition of H-Index: A scientist has an index “h” if h of their n papers have at least h citations each, and the other n-h papers have no more than h citations each.
Example:
Input: citations = [3,0,6,1,5]
Output: 3
Explanation:
citations = [3, 0, 6, 1, 5] means there are 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively. As the researcher has 3 papers with at least 3 citations (3, 6, 5) and the other remaining two with no more than 3 citations (0, 1). So the H-Index will be 3 in this case.

After replacing 6 with n = 5, we have citations = [3,0,5,1,5]. Now, we count the number of papers for each citation number 0 to . The counts are [1,1,0,1,0,2. The first k from right to left (5 down to ) that have k<=s is the h-index 3.

cutting off the area with citations more than n
Example 2:
Input: citations = [1,3,1]
Output: 1
Approach:
Idea:
To solve this problem we use the Counting Sort technique with a little trick.
The idea is to see that the result can only range from 0 to the length of the array (because we can’t have an h-index greater than the total papers published).
- So we create an array “papers_freq” which acts like a HashMap and loops backward from the highest element.
- Then we find “totalCitations ” which is the total number of papers that has more than i citations.
- We terminate when a total number of papers with more than i citations >= i (totalCitations >=i ).
- We don’t need to keep going because we are trying the biggest i possible, we stop and return the result.
Code:
C++ code for H-Index Leetcode Solution :
class Solution {
public:
int hIndex(vector<int>& citations) {
int len = citations.size();
vector<int> papers_freq(len+1);
for(int c: citations) {
if(c > len) {
papers_freq[len]++;
} else {
papers_freq[c]++;
}
}
int totalCitations = 0;
for(int i = len; i >= 0; i--) {
totalCitations += papers_freq[i];
if(totalCitations >= i) {
return i;
}
}
return -1;
}
};
Java code for H-Index Leetcode Solution :
class Solution {
public int hIndex(int[] citations) {
int len = citations.length;
int[] papers_freq = new int[len+1];
for(int c: citations) {
if(c > len) {
papers_freq[len]++;
} else {
papers_freq[c]++;
}
}
int totalCitations = 0;
for(int i = len; i >= 0; i--) {
totalCitations += papers_freq[i];
if(totalCitations >= i) {
return i;
}
}
return -1;
}
}Complexity Analysis for H-Index Leetcoee Solution:
Time Complexity:
The Time Complexity will be O(N), first, we need to traverse the “citations” array once which needs O(N) time. Then for finding the H-Index we need another O(N) since we traverse the papers_freq array at most once. So, we can say that the overall time complexity of the code will be O(N).
Space Complexity:
Space Complexity will be O(N) since we use extra space to store the counts.