• 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 。
    
    • 1
    • 2
    • 3
    • 4

    示例 2

    输入:citations = [1,2,100]
    输出:2
    
    • 1
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    三、解题思路

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

  • 相关阅读:
    工作队列 (五) 杂谈2
    吃,吃个大西瓜-第三章
    jenkins配置推送java项目
    minikube 快速使用入门
    22种常用设计模式示例代码
    贪心算法活动选择问题
    面试突击76:${} 和 #{} 有什么区别?
    C++ 入门
    DDoS攻击--防护本质
    WPF(一) WPF基本控件与布局
  • 原文地址:https://blog.csdn.net/weixin_44807903/article/details/133701824