问题描述:
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。
例如:某人的 h 指数是 20,这表示他已发表的论文中,每篇被引用了至少 20 次的论文总共有 20 篇。
提示:如果 h 有多种可能的值,h 指数 是其中最大的那个。
解题思路:
题目读了几遍很懵,看了题解,恍然大悟。
先对数组中的元素进行从小到大的排序,从数组的最大元素开始遍历,当citations[i]>h时,将h++,表示此时至少有一篇文章被应用一次
开始用平均数试了试,测试时21/81只能适用于1/4的用例,还是这一招猛,多思考,找规律!
解题方法:
int cmp(int*a,int*b)
{
return *a-*b;
}
int hIndex(int *citations, int citationsSize)
{
qsort(citations,citationsSize,sizeof(int),cmp);
int h=0;
int i=citationsSize-1;//从高位开始遍历
while(i>=0&&citations[i]>h)
{
h++;
i--;
}
return h;
}