274. H 指数

分类 - 力扣题解 共有 0 条评论
Problem: 274. H 指数

思路

定义数组长度为 $n$。

  1. 将数组从排序。
  2. 取数组第一个数字 $m=citations[0]$,$h = Min(m,n)$,$h$ 即最大可能的 $h$ 指数,因为 h 指数最大不可能超过论文数量。
  3. 判断 $citations[h-1]$ 是否大于等于 $h$,这里就分两种情况:

    1. 当 $citations[h-1] >= h$ 时,因为数组是从大到小排列的,所以下标为 $0 ~ h-1$ 这 $h$ 个数一定都大于 $h$,此时 $h$ 为返回的结果。
    2. 当 $citations[h-1] < h$ 时,说明当前 $h$ 不满足 $h$ 指数的定义( $h$ 个被引用 $h$ 次的论文),此时将 $h = h-1$,再次执行第 3 步,直到能返回结果。

需要考虑边界情况:当排序之后最大的那个数字等于 $0$ 时,直接返回 0

Code

/**
 * @param {number[]} citations
 * @return {number}
 */
var hIndex = function (citations) {
  citations.sort((a, b) => b - a);
  let maxHIndex = Math.min(citations[0], citations.length);
  if (maxHIndex === 0) {
    return 0;
  }
  while (true) {
    if (citations[maxHIndex - 1] >= maxHIndex) {
      return maxHIndex;
    }
    maxHIndex--;
  }
};
文章评论