Problem
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.
Algorithm
Bineary search.
Code
python3
class Solution:
def hIndex(self, citations: List[int]) -> int:
K = len(citations)
if 1 == K:
return (citations[0] >= 1) * 1
L, R, = 0, len(citations) - 1
while L < R:
Mid = (L + R) // 2
if citations[Mid] >= K - Mid:
R = Mid
else: L = Mid + 1
while L <= R and citations[L] < K - L:
L += 1
return K - L