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

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.

1. 将其发表的所有SCI论文按被引次数从高到低排序；
2. 从前往后查找排序后的列表，直到某篇论文的序号大于该论文被引次数。所得序号减一即为H指数。

/*solution1 as the definition ,4ms*/
class Solution {
public:
int hIndex(vector<int>& citations) {
if(citations.empty())
return 0;
sort(citations.begin(),citations.end(),greater<int>());
for(int i=0;i<citations.size();i++){
if(i>=citations[i])
return i;
}
return citations.size();
}
};


/*solution2 */
class Solution {
public:
int hIndex(vector<int>& citations) {
if(citations.empty())
return 0;
int size=citations.size(),sum=0;
vector<int> count(size+1,0);
/*统计引用次数为i的文章数目*/
for(int i=0;i<size;i++)
count[citations[i]>size?size:citations[i]]++;
for(int i=size;i>=0;i--){
/*从最后一个开始，引用次数大于等于i的文章数目是引用次数大于等于i+1的文章数加上引用次数等于i的文章数目*/
sum+=count[i];
if(sum>=i)
return i;
}
return -1;
}
};


### 学籍管理系统文档

#### 北邮教务系统评教脚本

Published on September 17, 2017

#### 72.Edit distance

Published on September 17, 2017