题目翻译的有点难理解,参考评论区的一个截图讲解

1
2
3
4
5
6
7
8
9
10
class Solution:
def hIndex(self, citations: List[int]) -> int:
citations.sort(reverse=True)
h = 0
for i in range(0, len(citations)):
if citations[i] > h:
h += 1
else:
break
return h

理解题目意思后,可以明白h需要满足,有h篇论文引用次数大于h

这个时候就可以有获得思路

将citations从大到小排序,h=0,将citations从第一位开始遍历与h进行比较

如果h < citations[i],说明h可以继续增大,直到h >= citations[i]的时候说明h已经到最大值,可以进行return

因为遍历的范围是0 - len(citations),即使所有数都是一致的如[7, 7, 7, 7, 7],那最终也只会输出5,并且因为从大到小排序,绝对不会出现因为多个较大的数重复出现导致有缺漏的情况