274. H-Index
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.
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."
Example:
Input:citations = [3,0,6,1,5]Output: 3 Explanation:[3,0,6,1,5]means the researcher has5papers in total and each of them had received3, 0, 6, 1, 5citations respectively. Since the researcher has3papers with at least3citations each and the remaining two with no more than3citations each, her h-index is3.
Note: If there are several possible values for h, the maximum one is taken as the h-index.
public class Solution { public int hIndex(int[] citations) { ArrayList<Integer> list = new ArrayList(); for(int i: citations){ list.add(i); } Collections.sort(list); Collections.reverse(list); for (int i = 0; i < citations.length; ++i) { if (i + 1 == list.get(i)) return i+1; if (i + 1 > list.get(i)) return i; //[0]的情况,很傻逼 } return citations.length; } }
这个方法反而慢的一比
public class Solution { public int hIndex(int[] citations) { Arrays.sort(citations); reverse(citations); for (int i = 0; i < citations.length; ++i) { if (i + 1 == citations[i]) return i+1; if (i + 1 > citations[i]) return i; //[0]的情况,傻逼 } return citations.length; } private static void reverse(int[] nums) { int left = 0; int right = nums.length - 1; while (left < right) { final int tmp = nums[left]; nums[left] = nums[right]; nums[right] = tmp; ++left; --right; } } }
先从大到小排序,然后从前往后扫描,如果当前文章数(即当前下标+1)等于值本身,则返回当前文章数作为 h-index;
如果当前文章数大于值本身,则返回当前文章数-1作为H-Index, 因为当前文章的引用数小于当前文章数,不能算在内。时间复杂度O(nlog,空间复杂度O(1)。

浙公网安备 33010602011771号