给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。

h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数 不超过 h 次。)

例如:某人的 h 指数是 20,这表示他已发表的论文中,每篇被引用了至少 20 次的论文总共有 20 篇。

解法一

class Solution {
 public:
  int hIndex(vector<int>& citations) {
    sort(citations.begin(), citations.end());
    int result = 0;
    for (int i = 0; i < citations.size(); i++) {
      int citationTimes = citations[i];
      int zhishaoPaperCount = citations.size() - i;
      if (citationTimes >= zhishaoPaperCount) result = max(result,zhishaoPaperCount);
    }
    return result;
  }
};

解法二
另外,将被引用次数和论文序号按照论文序号从大到小的顺序画在坐标系中,根据题意,可发觉,当点落在y=x的下方时,答案就出来了。

图片说明

class Solution {
public:
    int hIndex(vector<int>& citations) {
        int n = citations.size();
        sort(citations.begin(),citations.end());
        for (int i = 0; i < n; i++) {
            // 点在直线上方
            if (citations[i] >= n - i) {
                return n - i;
            }
        }
        return 0;
    }
};