Jes2ica.IO

coding, trading, reading

  1. 1. Problem
  2. 2. Solution
  3. 3. Notes

Problem

Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher’s h-index (citations array is sorted in ascending order).

According to the definition of h-index on Wikipedia: “A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each.”

For example, given citations = [3, 0, 6, 1, 5], which means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 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, his h-index is 3.

Note: If there are several possible values for h, the maximum one is taken as the h-index.

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public int hIndex(int[] citations) {
int left = 0, right = citations.length;
// For case "[0]", left = right.
while (left <= right) {
int mid = left + (right - left) / 2;
if (citations.length - mid > citations[mid]) {
// Move left pointer.
left = mid + 1;
} else {
right = mid;
}
}
return citations.length - left;
}

Notes

Arrays.binarySearch() returns a negative value that is equivalent to -[insertion point] - 1, where insertion point is defined as the index at which the search key would be inserted into the array or list.

This article was last updated on days ago, and the information described in the article may have changed.