leetcode 275. H-Index II-h因子|二分查找

本文介绍了一种解决H-Index II问题的有效算法,通过二分查找法可以在O(log n)的时间复杂度内找到学者的h指数。文章提供了Java及Python两种语言的实现代码,并对算法进行了详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接:275. H-Index II

【思路-Java、Python】 二分查找 T=O(logn)|M=O(1)

本题是基于 leetcode 274. H-Index-h因子|哈希表,如果对于 h-index 概念不是很理解的可以参考这篇博文。

本题采用二分查找进行

public class Solution {
    public int hIndex(int[] citations) {
        int level = 0, n = citations.length, left = 0, right = n - 1;
        while(left <= right) {
            int mid = left + (right - left) / 2;
            if(citations[mid] >= n - mid) {  //一旦发现引用次数大于 n-mid,就在左半部查找可能更大的 level
                level = n - mid;
                right = mid - 1;
            }
            else left = mid + 1;  //说明左半部没有更大的 level,则在右半部查找
        }
        return level;
    }
}
82 / 82  test cases passed. Runtime: 11 ms  Your runtime beats 67.83% of javasubmissions.

class Solution(object):
    def hIndex(self, citations):
        """
        :type citations: List[int]
        :rtype: int
        """
        level, n, left, right = 0, len(citations), 0, len(citations) - 1
        while left <= right :
            mid = (left + right) / 2
            if citations[mid] >= n - mid :
                level = n - mid
                right = mid - 1
            else : left = mid + 1
        return level
82 / 82  test cases passed. Runtime: 152 ms  Your runtime beats 28.13% of pythonsubmissions.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值