274. H-Index

    xiaoxiao2021-03-25  123

    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."

    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.

    Hint:

    An easy approach is to sort the array first.What are the possible values of h-index?A faster approach is to use extra space. 一开始想的是排序,之后从后向前遍历,这个位置的数大于长度与这个位置的差,说明符合条件,h++,最后返回h。代码如下:

    public class Solution { public int hIndex(int[] citations) { Arrays.sort(citations); int h = 0; for (int i = citations.length - 1; i >= 0; i --) { if (citations[i] >= (citations.length - i)) { h ++; } else { break; } } return h; } }Top Solution采用bucket sort,新建一个数组array[len + 1],遍历citations[len]数组,大于len的话array[len] ++,否则array[citations[i]]++,之后从后向前遍历累加array[len + 1],超过当前的位置值就说明有h篇论文的索引大于或者等于当前的索引数i。代码如下: public class Solution { public int hIndex(int[] citations) { int len = citations.length; if (len == 0) { return 0; } int[] array = new int[len + 1]; for (int i = 0; i < len; i ++) { if (citations[i] > len) { array[len] ++; } else { array[citations[i]] ++; } } int h = 0; for (int i = len; i >=0; i --) { h += array[i]; if (h >= i) { return i; } } return 0; } }

    转载请注明原文地址: https://ju.6miu.com/read-9020.html

    最新回复(0)