LeetCode - 274. H-Index

本文深入探讨了H-Index算法的实现,通过排序和桶排序两种方法,详细讲解了如何在给定引用次数列表中找到最大符合条件的H值。通过实例演示了算法的运行过程,帮助读者理解算法背后的逻辑。

274. H-Index

先来理解一下这道题目
简单来说,寻一个最大的符合条件的数;条件:至少有h篇citation至少为h的paper
eg1. [3,0,6,1,5] -> [0,1,3,5,6]
至少有6篇citation至少为6的paper(其实只有1篇,[6]) -> NO
至少有5篇citation至少为5的paper(其实只有2篇,[5,6]) -> NO
至少有3篇citation至少为3的paper(其实有3篇,[3,5,6]) -> YES -> ANSWER
但其实我们并不需要考虑6的情况,因为一共只有5篇,不可能有6篇citaition为6的paper
eg2. [7,8,8,8]
我们可以从array size开始,
至少有4篇citation至少为4的paper([7,8,8,8]) -> YES -> ANSWER

Sort O(nlogn) + O(n)

Sort之后我们可以知道什么?从后往前遍历,n-i为大于当前citation的篇数
[0,0,4,4]
i=3, citations[i] = 4, n-i = 1 -> 至少有1篇citation至少为4的paper -> 至少有1篇citation至少为1的paper
i=2, citations[i] = 4, n-i = 2 -> 至少有2篇citation至少为4的paper -> 至少有2篇citation至少为2的paper
i=1, citations[i] = 0, n-i = 3 -> 至少有3篇citation至少为0的paper -> stop

class Solution:
    def hIndex(self, citations: List[int]) -> int:
        if not citations: return 0
        citations.sort()
        res, n = 0, len(citations)
        for i in range(n-1, -1, -1):
            if(n-i<=citations[i]):
                res = n-i
            else:
                break
        return res

BucketSort O(n)

class Solution:
    def hIndex(self, citations: List[int]) -> int:
        N = len(citations)
        cnts = [0] * (N + 1)
        for c in citations:
            cnts[[c, N][c > N]] += 1
        sums = 0
        for h in range(N, 0, -1):
            sums += cnts[h]
            if sums >= h:
                return h
        return 0

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值