Python每日一练---第九天:H指数

前言📢📢

Python每日一练来啦,本文已收录于:《Python每日一练》专栏

此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,持续更新中,欢迎免费订阅!!!
*

1. 问题描述

给你一个整数数组 citations ,其中 citationsi 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数

根据维基百科上 h 指数的定义:h 代表"高引用次数" ,一名科研人员的 h指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数是其中最大的那个。

示例 1:

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

示例 2:

**输入:**citations = 1,3,1

**输出:**1

提示:

  • n == citations.length

  • 1 <= n <= 5000

  • 0 <= citationsi <= 1000

2. 问题分析

H指数的定义是:一个研究者有h篇论文,每篇至少被引用n次,并且剩下的论文被引用次数不超过h次。

换句话说,就是找数组中,有n个数大于n。
*

3. 算法思路

对于每个候选的 h 值:
(1)计算允许的"低引用"论文数 :leftMaxCount = n - h

  • 因为至少要有 h 篇论文引用次数 ≥ h,所以最多只能有 n-h 篇论文引用次数 < h

(2)统计实际"低引用"论文数:遍历数组,统计引用次数 < h 的论文数量

(3)验证条件:如果实际低引用论文数 ≤ 允许的低引用论文数,说明满足 h 指数条件
*

4. 代码实现

python 复制代码
from typing import List


class Solution:
    def hIndex(self, citations: List[int]) -> int:
        n = len(citations)
        maxN = n  # h指数最大可能值是n(论文总数)

        # 从最大可能的h值n开始,递减到1
        for max in range(maxN, 0, -1):
            leftMaxCount = n - max  # 允许引用次数小于h的论文数量
            count = 0  # 统计实际引用次数小于h的论文数量

            # 遍历所有论文
            for i in range(n):
                if citations[i] < max:
                    count += 1  # 统计引用次数小于h的论文
                # 如果已经超过允许的数量,提前退出
                if count > leftMaxCount:
                    break

            # 检查是否满足条件
            if count <= leftMaxCount:
                return max  # 找到最大的h值
        return 0  # 如果没有找到,返回0

if __name__ == '__main__':
    print(Solution().hIndex([3,0,6,1,5]))
    print(Solution().hIndex([1,3,1]))
    print(Solution().hIndex([0]))
相关推荐
岁月宁静5 分钟前
一、《从零手撸 Agent》 我用 10 行代码跑通了第一次大模型调用(顺便踩了 4 个坑)
前端·python·agent
大连好光景6 分钟前
【AI Agent案例开发项目01解读】
chrome·python·langchain
青 春 记 忆9 分钟前
零基础入门python43:Django接口测试与库存边界
python·django·后端开发
geovindu10 分钟前
CSharp: State Pattern
开发语言·后端·c#·.net·状态模式·行为模式
IT小白杨14 分钟前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
Patrick在香港15 分钟前
Python 拉取 C&SD 官方 API:香港 2022 年已跨过“超老龄线“,而抚养比正在爬回 1961
android·c语言·python·数据分析·时序数据库·数据可视化·香港
2601_9623824317 分钟前
Python零基础入门,看完直接上手写代码
python·机器学习·编程语言·数据科学·入门教程
信誓旦旦的程序猿17 分钟前
【零依赖量化数据实战 #25】北交所技术指标与基本面
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
2601_9669496520 分钟前
Python 量化开发为什么适合使用金融数据 SDK?从数据获取到策略研究的工程化实践
开发语言·python·数据分析·量化交易·股票数据·quantdash
科技小E20 分钟前
训完怎么带走?AI模型私有化部署平台DLTM模型导出ONNX/PyTorch与离线部署跑遍产线边缘
人工智能·pytorch·python