zoukankan      html  css  js  c++  java
  • 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."

    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.

    Credits:
    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

     1 public class Solution {
     2     public int hIndex(int[] citations) {
     3         int[] res = new int[citations.length];
     4         mergesort(citations,res,0,citations.length-1);
     5         for(int i=0;i<citations.length;i++){
     6             if(i>=citations[i]){
     7                 return i;
     8             }
     9         }
    10         return citations.length;
    11     }
    12     public void mergesort(int[] citations,int[] res,int start,int end){
    13         if(start>=end) return;
    14         int mid = start+(end-start)/2;
    15         mergesort(citations,res,start,mid);
    16         mergesort(citations,res,mid+1,end);
    17         combine(citations,res,start,mid+1,end);
    18     }
    19     public void combine(int[] citations,int[] res,int left,int mid,int right){
    20         int left_start  = left;
    21         int left_end = mid-1;
    22         int right_start = mid;
    23         int right_end = right;
    24         int k = left_start;
    25         while(left_start<=left_end&&right_start<=right_end){
    26             if(citations[left_start]>=citations[right_start]){
    27                 res[k++] = citations[left_start++];
    28             }else{
    29                 res[k++] = citations[right_start++];
    30             }
    31         }
    32         while(left_start<=left_end){
    33             res[k++] = citations[left_start++];
    34         }
    35         while(right_start<=right_end){
    36             res[k++] = citations[right_start++];
    37         }
    38         for(int i=left;i<=right;i++){
    39             citations[i] = res[i];
    40         }
    41     }
    42 }
    43 //the run time complexity could be O(nlogn) ,the space complexity could be O(n);
  • 相关阅读:
    重载函规则
    lambd
    内联函数
    c和c++中的枚举和 区别
    关于于c++中的类型转换
    作用域解析运算符
    day01
    二级指针输入特性
    二级指针的 数出特性
    influence maximization 第二弹
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6901957.html
Copyright © 2011-2022 走看看