提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目
一、初始想法
先sort排序,再用二分法查找合适的h值
不过这样就会稳定算法复杂度为堆排序的nlogn
二、计数排序
列出所有引用次数的论文次数,从大到小找到h值。
这回出现一个问题:引用次数可能很大,这样会导致数组过大浪费空间
由H值的定义,引用数一般小于于论文数,可以把过大的引用数降到论文数,这样不会影响H值
代码如下(示例):
class Solution:
def hIndex(self, citations: List[int]) -> int:
top = len(citations) //论文数,同时也是最大引用数
a = [0]*(top+1) //引用数为0到n的篇数
for i in range(0,top): //统计引用数
a[min(citations[i], top)] += 1
h = top //h值由大到小
s = a[h] //h值对应的论文数
while(h>s): //应该满足h<=s
h -= 1
s += a[h]
return h