持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给你一个整数数组 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个数大于
h,且另外的数小于等于h - 先让
h=0,每遍历一次,发现数大于h,就让h++ - 一直到
citations[h] > h不成立结束遍历 - 此时已经遍历过的
h个数都比h大了,后面的数都不比h大 - 输出结果``h
解题代码
var hIndex = function(citations) {
let h = 0
citations.sort((a,b)=>b-a)
while (h < citations.length && citations[h] > h) {
h++;
}
return h;
};
如有任何问题或建议,欢迎留言讨论!