一、题目描述
你给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数。计算并返回该研究者的 h
指数。
根据维基百科上 h 指数的定义:
h
代表“高引用次数” ,一名科研人员的h
指数 是指他(她)至少发表了h
篇论文,并且每篇论文 至少 被引用h
次。如果h
有多种可能的值,h
指数 是其中最大的那个。
二、解题思路
1.根据h指数的定义我们得知:引用次数应该大于等于发表的论文篇数。
2.如果 h
有多种可能的值,h
指数 是其中最大的那个。
3.先将数组从大到小排序,将引用次数和下标比较:如果大于下标,则说明是满足条件的;
4.因为下标是比篇数小1,如果等于下标,如3等于下标3,此时实际有4篇,不能说至少发表了4 篇论文,并且每篇论文 至少 被引用 3次。应该退回上一篇,至少发表了 3
篇论文,并且每篇论文 至少 被引用 3
次。而下标正好比篇数小1,所以应当返回此时的下标。
5.小于下标同理。
6.如果遍历完没有小于等于下标的条件,说明全部满足,应该返回数组长度(即至少发表了n篇论文)。
三、解题代码
示例:
/**
* @param {number[]} citations
* @return {number}
*/
var hIndex = function(citations) {
citations.sort((a,b)=>b-a)
for(let i = 0;i<citations.length;i++){
if(citations[i]<=i) return i
}
return citations.length
};