1.19 H-Index

Description

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.

Method

sort firstly and then check each element to find the h value

second method use extra space use a array to calculate the number of papers for each citations. and then accumulate from the highest citation to check whether it fulfills requirements, that there are h papers that has at least h citations.

Time and Space Complexity

o(nlogn + n) o(n)

Code

public class Solution {

    public int hIndex(int[] citations) {
       if (citations == null || citations.length == 0){
           return 0;
       }
       Arrays.sort(citations);
       int n = citations.length;

       int res = citations[0] >= n ? n : 0;
       for (int i = 1; i < citations.length; i++){
            if (n - i <= citations[i] && citations[i - 1] <= n - i){
                res = n - i;
            }
       }
       return res;
}

}

 public int hIndex(int[] citations){
          int length = citations.length;
          if (length == 0){
              return 0;
          }
          int[] arr = new int[length + 1];
          for (int i = 0; i < length; i++){
               if (citations[i] > length){
                   arr[length] += 1;
               } else {
                   arr[citations[i]] += 1;
               }
          }
          int t = 0;

          for (int i = length; i >= 0; i--){
               t += arr[i];
               if (t >= i){
                   return i;
               }
          }
          return 0;
   }

results matching ""

    No results matching ""