难度: Medium
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.
题解:这道题是一个学术水平评价的h-因子算法的设计。h-因子的含义是,一个人的所有论文里至多有h篇文章被引用了至少h次。说起来绕口,实际上是一个非常简单的问题。我们只需要把所有的文章根据被引用次数排序之后,从后往前开始遍历,最后一个元素下标为1,倒数第二个元素下标为2,以此类推。如果这个元素本身的大小要比元素下标要大,那么将我们事先声明好的变量result(之后也是返回这个值)赋值为这个元素的下标。因为我们是从大到小进行遍历,于是我们遍历过的元素都比现在的元素要大,那么久至少有下标个元素大于等于现在的元素,然后我们比较一下下标和元素的大小就可以了。
代码如下:
int hIndex(vector<int>& citations)
{
if(citations.size()==0)
return 0;
if(citations.size()==1&&citations[0]==0)
return 0;
sort(citations.begin(),citations.end());
int result=0;
int index=0;
for(int i=citations.size()-1;i>=0;i--)
{
if(citations[i]>=index+1)
{
result=index+1;
index+=1;
}
}
if(index!=0)
return index;
else
return 0;
}