Skip to content

H 指数

LeetCode-274

js
/**
H 指数是指一个研究者的论文中,有 h 篇论文至少被引用了 h 次,而剩下的 N - h 篇论文每篇被引用次数不超过 h 次。其中N表示该研究者的论文总数。

因为要求 h 篇论文的引用次数是至少 h 次,所以在判断当前这篇论文是否可以算入 H 指数时,需要比较文章的引用次数和 h+1 的大小。
如果当前这篇论文的引用次数大于等于 h+1,说明当前已经有 h+1 篇文章符合 H 指数的条件,即至少被引用了 h+1 次以上,此时将 h 增加 1;否则,就说明当前还不够 h+1 篇文章符合条件,直接退出循环,返回当前的 h 即可。

举个例子,假设当前 h=3,如果一篇文章的引用次数 citation[i] ≥ h+1 = 4,则表示这篇文章是符合要求的一篇,将 h 加 1,继续找第二篇、第三篇、第四篇,直到找到不满足要求的一篇文章(即 citation[i] < h+1),此时停止遍历,返回 h 即可。
 */

function hIndex(citations) {
  citations.sort((a, b) => b - a) // 升序拍
  let h = 0 // H指数
  for (let i = 0; i < citations.length; i++) {
    // 当前至少有h+1篇文章被引用了h+1次或更多次
    if (citations[i] >= h + 1) h++
    else break
  }
  return h
}

console.log(hIndex([5, 4, 3, 2, 2, 2, 1]))