码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 275. H 指数 II Python


    文章目录

    • 一、题目描述
        • 示例 1
        • 示例 2
    • 二、代码
    • 三、解题思路


    一、题目描述

    给你一个整数数组 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指数的定义,这一寻找过程可以使用二分查找的方式进行查找。

  • 相关阅读:
    爆肝Python自学学习路线
    LeetCode 1732. 找到最高海拔
    [含文档+PPT+源码等]精品基于Uniapp+SSM实现的Android的校园新闻管理系统实现的App[包运行成功]计算机毕业设计Android项目源码
    redis之主从复制和哨兵模式
    【xubuntu】 在xubuntu系统上开启自动登陆,并自动启动一个应用程序。
    外汇市场如何监管?
    Java:单例模式探究
    <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 2》(6)
    纯css实现3D鼠标跟随倾斜
    【PAT甲级】1146 Topological Order
  • 原文地址:https://blog.csdn.net/weixin_44807903/article/details/133701824
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号