[路飞][LeetCode]274. H 指数

101 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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.length
  • 1 <= n <= 5000
  • 0 <= 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;
};

如有任何问题或建议,欢迎留言讨论!