1. 理解H指数问题
H指数(H-index)是衡量科研人员学术产出的重要指标,由物理学家Jorge E. Hirsch在2005年提出。这个指标试图同时量化研究者的学术产出数量和质量。对于算法学习者来说,理解H指数的计算逻辑不仅能帮助我们解决LeetCode 274题,更能培养处理统计类问题的思维模式。
1.1 H指数的核心定义
H指数的标准定义包含两个关键条件:
- 研究者发表了h篇论文,每篇论文至少被引用h次
- 在满足条件1的情况下,h是所有可能值中的最大值
举例说明:假设某学者有5篇论文,引用次数分别为[3,0,6,1,5]。当h=3时:
- 有3篇论文(引用次数为3、5、6)满足引用次数≥3
- 没有更大的h值能满足条件(如h=4时只有2篇满足)
因此该学者的H指数为3。
1.2 问题转化与抽象
从算法角度看,这个问题可以抽象为:
给定一个非负整数数组citations,其中citations[i]表示第i篇论文的引用次数。我们需要找到最大的h,使得数组中至少有h个元素≥h。
这个抽象让我们意识到,H指数计算本质上是一个统计+搜索问题。我们需要统计不同引用次数的论文数量,然后通过某种策略找到满足条件的最大h值。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 暴力解法:直接验证法
2.1 算法思路
暴力解法是最直观的解决方案,完全按照H指数的定义实现:
- 遍历所有可能的h值(从1到论文总数n)
- 对每个h值,统计引用次数≥h的论文数量
- 找到最大的h值使得统计数量≥h
这种方法的优势是逻辑简单直接,完全匹配问题定义,非常适合算法初学者理解问题本质。
2.2 代码实现与解析
java复制public int hIndexBruteForce(int[] citations) {
int maxH = 0;
int n = citations.length;
// 尝试所有可能的h值(1到n)
for (int h = 1; h <= n; h++) {
int count = 0;
// 统计引用次数≥h的论文数量
for (int citation : citations) {
