8-二分-索引二分-H 指数

这是索引二分的第八篇算法,力扣链接

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 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。

第一反应是看懵了,第二反应是不急,我们一点一点分析问题。

首先这个h不是指数组里的值,数组里的值要大于等于h

然后这个h的指数是指至少发表了 h 篇论文,代表一定存在len >= h

其次,至少 有 h 篇论文被引用次数大于等于 h,假设这个是个有序数组,citations[len-h] >= h

老规矩,上暴力法试试,先将数组排序,从右到左技术,如果h < citation[i] 解h++

func hIndex(citations []int) int {sort.Ints(citations)result := 0for i := len(citations) - 1; i >= 0; i-- {if citations[i] > result {result++}}return result
}

这个算法的耗时瓶颈在排序算法上,所以考虑不用排序,该用打表的方式记录所有的次数,但是怎么打表呢?我们可以开一个从0~n的数组,对于大于长度的数组值当n处理。打表结束之后再倒序计数,比较当前的文章数和引用总次数。

func hIndex(citations []int) int {count := make([]int, len(citations)+1)for _, num := range citations {if num > len(citations) {count[len(citations)]++} else {count[num]++}}total := 0for i := len(count) - 1; i >= 0; i-- {total += count[i]if total >= i {return i}}return 0
}

上面暂时都归类为暴力法,回归正题,我们还是得用二分法解决问题。

明确这个问题,找的不是数组的值,而是找的其实是数组的长度,即论文个数(体会一下这个问题)。所以二分法来说,其实也是有序的。我们根据mid的值,统计符合目标的引用次数,移动mid指针。

func hIndex(citations []int) int {l, r := 0, len(citations)for l <= r {mid := l + (r-l)/2count := 0for _, num := range citations {if num >= mid {count++}}if count >= mid {l = mid + 1} else {r = mid - 1}}return l
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【游戏篇】Scratch之小猴子接水果

【作品展示】小猴子接水果 操作&#xff1a;点击小绿旗&#xff0c;按下键盘左右键控制小猴子移动拿到水果&#xff0c;同时也要躲避炸弹。

#HarmonyOS:应用的包名配置--应用图标和标签配置--配置链接

配置相关 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/application-component-configuration-stage-0000001478340869-V2 应用的包名配置 应用需要在工程的AppScope目录下的app.json5配置文件中配置bundleName标签&#xff0c;该标签用于标识应用的唯…

【自主探索】rrt_exploration 源码解析

各文件运行顺序&#xff1a; simple.launchglobal_rrt_detector.cpplocal_rrt_detector.cppfilter.pyassigner.py 文章目录 一、simple.launch二、global_rrt_detector.cpp三、local_rrt_detector.cpp四、filter.py五、assigner.py 一、simple.launch <!-- Launch file fo…

如何排查线上问题的?

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、预警层面 1.1 做好监控告警 1.2 定位报警层面 二、近期版本 2.1 判断最近有没有发版本 2.2 回归最近的版本 三、日志告警…

用队列实现栈,力扣

题目地址&#xff1a; 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 难度&#xff1a;简单 今天刷用队列实现栈&#xff0c;大家有兴趣可以点上看看题目要求&#xff0c;试着做一下。 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 方法…

MySQL8改库,表,字段编码及排序规则

修改数据库编码格式语句 SELECT CONCAT(ALTER DATABASE ,SCHEMA_NAME, CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;) as 修改数据库编码格式语句 FROM information_schema.SCHEMATA WHERE 11 AND SCHEMA_NAME 数据库名称 #要修改的数据库名称 -- 修改所有自建库 -…

conda环境报错: Solving environment: failed with initial frozen solve.

出现的情况&#xff1a; 解决方法&#xff1a; 参考了许多博客 建议的方法&#xff1a; 创建一个虚拟环境 conda create -n torch_1.3 python3.6 激活虚拟环境 conda activate torch_1.3 conda安装 conda install pytorch1.5.0 如果报错每个包单独安装就可以了&#x…

使用CFimagehost源码自建无需数据库支持的PHP图片托管服务

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

k8s-learning-why we need pod

应用场景 应用从虚拟机迁移到容器中 为什么虚拟机中的应用不能无缝迁移到容器中 虚拟机中应用&#xff1a;一组进程&#xff0c;被管理在systemd或者supervisord中 容器的本质&#xff1a;一个容器一个进程 所以将运行在虚拟机中的应用无缝迁移到容器中&#xff0c;与容器…

addslashes()函数

addslashes() 函数是 PHP 中用于在字符串中的特定字符前添加反斜杠 \ 的函数。它通常用于准备字符串&#xff0c;以防止其中的字符被误解为具有特殊含义的字符。这个函数的主要用途是在构建 SQL 查询语句或其他需要转义特殊字符的上下文中&#xff0c;以防范一些安全问题&#…

ubuntu20.04里面安装目标检测数据标注软件labelImg的详细过程

1.在github克隆仓库到本地 地址&#xff1a;https://github.com/Ruolingdeng/labelImg.git 或者百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1p-478j5WOTN0TKmv3qh-YQ?pwdl8bj 提取码&#xff1a;l8bj 2、进入到labelimg的文件夹&#xff0c;安装pyqt相关依赖包 …

好的CRM系统是什么样的?有没有推荐的CRM?

企业如果引入一套优秀的CRM系统&#xff0c;能极大地提升企业的效率&#xff0c;调动人员积极性。同时&#xff0c;带有自动化功能的CRM系统能帮助企业省去日常经营中琐碎无意义的活动&#xff0c;让企业员工把更多时间集中到业务开发上来&#xff0c;实现经济效益的提升。那么…

下一站 GenAI @你!站稳扶好,“码”上发车

点击下方链接&#xff0c;精彩抢先看https://dev.amazoncloud.cn/column/article/657a74432b6d177219412733?trkcndc-detail 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最…

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg &#xff1a;主配置文件&#xff0c;配置 ansible…

解决固定资产盘点问题,易点易动来帮忙!

固定资产盘点是企业管理中不可或缺的环节&#xff0c;然而&#xff0c;很多企业在固定资产盘点方面面临一系列问题&#xff1a; 盘点过程繁琐&#xff1a;传统的手动盘点方式需要耗费大量人力和时间&#xff0c;容易出现疏漏和错误&#xff0c;效率低下&#xff1b; 数据记录不…

物联网有哪些关键技术?

物联网有哪些关键技术? 物联网正在以前所未有的速度改变我们的生活和工作方式。作为一个庞大的网络&#xff0c;物联网连接了各种设备&#xff0c;使其能够相互通信和交互&#xff0c;进而实现智能化的目标。然而&#xff0c;要实现物联网的发展和应用&#xff0c;关键技术的支…

随记-nginx docker + SSL 配置 - 配置等资源挂宿主机

随记-Nginx docker SSL 配置 - 配置等资源挂宿主机等 笔者动手配置&#xff0c;随手写的笔者&#xff0c;保证可操作 话说现在padmon是不是已经有代替docker的趋势了&#xff0c;谁能告诉我一把&#xff1f; 配置前准备 # 拉取nginx镜像 docker pull nginx #启动(暂时) doc…

Docker技术基础梳理 - Docker网络管理

为什么需要容器的网络管理&#xff1f; 容器的网络默认与宿主机、与其他容器相互隔离&#xff0c;且容器中可以运行一些网络应用&#xff0c;比如nginx、web应用、数据库等&#xff0c;如果需要让外部也可以访问这些容器中运行的网络应用&#xff0c;那么就需要配置网络来实现…

深度学习代码片段收集

print(number of model params, sum(p.numel() for p in model.parameters() if p.requires_grad))sum(p.numel() for p in model.parameters() if p.requires_grad )可以用来计算参与训练的参数量 model.parameters() 返回模型中所有参数的迭代器。 if p.requires_grad: 这部…

【ITK库学习】使用itk库进行图像滤波ImageFilter:二阶微分

目录 1、itkRecursiveGaussianImageFliter 递归高斯滤波器2、itkLapacianRecursiveGaussianImageFiter 拉普拉斯高斯滤波器 1、itkRecursiveGaussianImageFliter 递归高斯滤波器 该类用于计算具有高斯核近似值的 IIR 卷积的基类。 该类是递归滤波器的基类&#xff0c;它与高斯…