275. H 指数 II Python


一、题目描述

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。

h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。

请你设计并实现对数时间复杂度的算法解决此问题。

示例 1

输入:citations = [0,1,3,5,6]
输出:3 
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6 次。
     由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3 。

示例 2

输入:citations = [1,2,100]
输出:2

提示: n == citations.length 1 <= n <= 105 0 <= citations[i] <= 1000 citations 按 升序排列

二、代码

代码如下:

import numpy as np
class Solution:
    def hIndex(self, citations: List[int]) -> int:
        h = len(citations)
        c = np.array(citations)
        left = 1
        right = h
        result = 0
        print(c)

        if np.sum(c - right >= 0) >= right:
            return right
        if np.sum(c - left >= 0) < left:
            return result

        while (left <= right):
            mid = int((left + right) / 2)
            print(f"now left:{left} right:{right} mid:{mid}")
            if mid <= np.sum(c - mid >= 0):
                print("走右")
                left = mid + 1
                result = mid
                continue
            if np.sum(c - mid >= 0) < mid:
                print("走左")
                if left <= np.sum(c - mid >= 0):
                    result = left
                right = mid - 1
                continue
        print("result:",result)
        return result

三、解题思路

本题解的大致思路为采用二分查找的方法去寻找符合条件的最大h指数,尽可能缩小寻找h指数的次数以满足题意。具体思路为在1~len(citations)之间寻找一个最大的整数满足h指数的定义,这一寻找过程可以使用二分查找的方式进行查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值