H-Index 是衡量科学家或学者学术影响力的一种指标,它基于其发表论文的引用次数。具体来说,一个学者的 H-Index 是指他/她有 H 篇论文,每篇论文至少被引用了 H 次。
LeetCode 是一个在线编程平台,提供了大量的编程题目,帮助程序员提升编程能力和准备技术面试。LeetCode 上的题目涵盖了算法、数据结构、数据库、Shell 脚本等多个领域。
题目编号 274 在 LeetCode 上对应的是“H-Index”问题。这个问题的描述如下:
题目描述: 给定一位研究者论文的引用次数数组(每个元素表示一篇论文的引用次数),请计算该研究者的 H-Index。
示例: 输入: citations = [3, 0, 6, 1, 5] 输出: 3 解释: 该研究者有 5 篇论文,每篇论文至少被引用了 3 次,所以 H-Index 是 3。
解题思路:
-
排序法:
- 首先将引用次数数组进行排序(降序)。
- 遍历排序后的数组,找到第一个满足条件的索引 i,使得
citations[i] >= i + 1
,此时 i + 1 就是 H-Index。
-
计数法:
- 创建一个长度为
n + 1
的数组count
,其中count[i]
表示引用次数为i
的论文数量。 - 遍历引用次数数组,填充
count
数组。 - 从后向前累加
count
数组的值,找到第一个满足条件的索引 i,使得累加值 >= i,此时 i 就是 H-Index。
- 创建一个长度为
代码实现(排序法):
def hIndex(citations):
citations.sort(reverse=True)
n = len(citations)
for i in range(n):
if citations[i] >= i + 1:
continue
else:
return i
return n
示例
citations = [3, 0, 6, 1, 5] print(hIndex(citations)) # 输出: 3
代码实现(计数法):
def hIndex(citations):
n = len(citations)
count = [0] * (n + 1)
for citation in citations:
if citation >= n:
count[n] += 1
else:
count[citation] += 1
total = 0
for i in range(n, -1, -1):
total += count[i]
if total >= i:
return i
return 0
示例
citations = [3, 0, 6, 1, 5] print(hIndex(citations)) # 输出: 3
这两种方法各有优缺点:
- 排序法:思路简单,但时间复杂度为 O(n log n)。
- 计数法:时间复杂度为 O(n),但需要额外的空间来存储计数数组。
选择哪种方法取决于具体的应用场景和对时间、空间复杂度的要求。
发表回复