「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」
274. H 指数
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数 不超过 h 次。
如果 h 有多种可能的值,h 指数 是其中最大的那个。
示例1:
输入:citations = [3,0,6,1,5]
输出:3
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。
示例2:
输入: citations = [1,3,1]
输出: 1
提示:
n == citations.length1 <= n <= 50000 <= citations[i] <= 1000
排序求解
思路
由题目可得我们会得到一个数组,包含着所有论文的引用次数,我们需要跟据H指数的规则来找出这写论文的最大H指数
如果有1篇文章引用次数大于等于1,那么H最小为1
如果有2篇文章引用次数大于等于2,那么H最小为2
...
最后返回最大的H指数
跟据这个规则,我们可以发现题目中的引用次数和排序没有关系,我们只需要找最大H指数即可
但是H指数和排序缺有关系
因为我们要统计最大H指数,如果从大到小排序,我们每个元素如果符合当前要求就让H++
要符合什么要求呢?
0位的引用最少为1才会使H++,所以可以得到关系citations[i]>i
1位的引用最少为2才会使H++
...
由此我们找到了寻找最大H的方法
具体步骤:
- 我们首先需要对数组进行降序排序,这里直接使用sort
- 遍历数组,如果满足citations[i]>i的条件,那么H++
- 如果不满足 citations[i]>i,那么后续的元素citations[i]会更小,i会更大,不会再有符合的条件的情况,所以直接break终止循环
最后返回H即可
var hIndex = function(citations) {
citations.sort((a,b)=>b-a)
var h = 0
for(var i = 0;i < citations.length;i++){
if(citations[i]>i){
h = i+1
}else{
break
}
}
return h
};