Last updated on February 2nd, 2025 at 05:47 am
Here, we see a H-Index II LeetCode Solution. This Leetcode problem is solved using different approaches in many programming languages, such as C++, Java, JavaScript, Python, etc.
List of all LeetCode Solution
Topics
Companies
Level of Question
Medium

H-Index II LeetCode Solution
Table of Contents
1. Problem Statement
Given an array of integers citations
where citations[i]
is the number of citations a researcher received for their ith
paper and citations
is sorted in ascending order, return the researcher’s h-index.
According to the definition of h-index on Wikipedia: The h-index is defined as the maximum value of h
such that the given researcher has published at least h
papers that have each been cited at least h
times.
You must write an algorithm that runs in logarithmic time.
Example 1:
Input: citations = [0,1,3,5,6]
Output: 3
Explanation: [0,1,3,5,6] means the researcher has 5 papers in total and each of them had received 0, 1, 3, 5, 6 citations respectively. Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, their h-index is 3.
Example 2:
Input: citations = [1,2,100]
Output: 2
2. Coding Pattern Used in Solution
The coding pattern used in the provided code is Modified Binary Search. This pattern is a variation of the standard binary search algorithm, where the search space is adjusted based on a specific condition rather than just looking for an exact match. In this case, the code is searching for the “h-index” by comparing the number of citations at a given index with the number of papers that have at least that many citations.
3. Code Implementation in Different Languages
3.1 H-Index II C++
class Solution { public: int hIndex(vector<int>& citations) { int n = citations.size(); int min = 0, max = n - 1; int mid; while (min <= max) { mid = (min + max) / 2; if (citations[mid] < n - mid) { min = mid + 1; } else { max = mid - 1; } } return n - min; } };
3.2 H-Index II Java
class Solution { public int hIndex(int[] citations) { int len = citations.length; int lo = 0, hi = len - 1; while (lo <= hi) { int med = (hi + lo) / 2; if (citations[med] == len - med) { return len - med; } else if (citations[med] < len - med) { lo = med + 1; } else { hi = med - 1; } } return len - lo; } }
3.3 H-Index II JavaScript
var hIndex = function(citations) { let start = 0, end = citations.length-1 while(start <= end){ let mid = Math.floor((start+end)/2) if(mid+1 <= citations[citations.length-mid-1]){ start = mid + 1 continue } end=mid-1 } return start };
3.4 H-Index II Python
class Solution(object): def hIndex(self, citations): n = len(citations) l, r = 0, n-1 while l <= r: mid = (l+r)/2 if citations[mid] >= n-mid: r = mid - 1 else: l = mid + 1 return n-l
4. Time and Space Complexity
Time Complexity | Space Complexity | |
C++ | O(log n) | O(1) |
Java | O(log n) | O(1) |
JavaScript | O(log n) | O(1) |
Python | O(log n) | O(1) |