In this **Leetcode H-Index II problem solution**, we have 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 compute the researcher's h-index.

According to the definition of h-index on Wikipedia: 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.

If there are several possible values for h, the maximum one is taken as the h-index. You must write an algorithm that runs in logarithmic time.

## Problem solution in Python.

class Solution: def hIndex(self, citations: List[int]) -> int: n = len(citations) if n == 0: return 0 l = 0 r = n while l<r: m = l + (r - l)//2 if n - m <=citations[m]: r = m else: l = m + 1 return n - l

## Problem solution in Java.

public class Solution { public int hIndex(int[] citations) { if (citations.length == 0) return 0; else if (citations.length == 1) { if (citations[0] == 0) return 0; else return 1; } int n = citations.length; if (n <= citations[0]) // tricky optimization return n; int l = 1; int r = n; while (l < r) { int m = l + (r - l) / 2; if (n - m <= citations[m]) { r = m; } else { l = m + 1; } } return n - r; } }

## Problem solution in C++.

int hIndex(vector<int>& c,int ans=0) { for(int sz=c.size(),i=sz-1;i>=0;i--) ans = max(ans,min(c[i],sz-i)); return ans; }

## Problem solution in C.

int hIndex(int* citations, int citationsSize) { int lo = 0, hi = citationsSize, mid, index = 0; while (lo <= hi) { mid = lo + ((hi - lo) >> 1); if (citations[citationsSize - mid - 1] > mid) { lo = mid + 1; index = lo; } else { hi = mid - 1; } } return index; }

## 0 Comments