H-Index II LeetCode Solution

Last updated on October 25th, 2024 at 10:20 pm

Here, We see H-Index II LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.

List of all LeetCode Solution

Topics

Binary Search

Companies

Facebook

Level of Question

Medium

H-Index II LeetCode Solution

H-Index II LeetCode Solution

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

1. H-Index II LeetCode Solution 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;
    }
};

2. H-Index II Solution 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. H-Index II Solution 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    
};

4. H-Index II Solution 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
Scroll to Top