275. H 指数 II--Leetcode_二分
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/h-index-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目的大意是这样的
有一个升序排列的数组citations,返回citations的h指数
h指数:在数组citations中,至少有h个元素,他们的值大于等于h
提示:如果h有多种可能的值h指数是其中最大的那个。
二分思路
二分h指数
简要证明h指数具有二分性质
如果数组citations不存在一个h指数i,那么一定不会存在一个h指数i+1,i+2,...,i+k(k>=1)
举个例子
假设在一组递增序列中,没有两个大于等于2的元素,那么大于等于3的元素最多只会有一个
由此得出h指数具有二分性质
二分h指数代码如下
class Solution {
public:
bool check(int h,vector<int>& citations){
int len = -1;
for(int i=0;i<citations.size();i++){
if(citations[i]>=h && citations.size()-i == h){
// 得到有len-i+1篇论文至少引用了h次
len = citations.size()-i;
break;
}
}
if(len!=-1)return 1;
else return 0;
}
int hIndex(vector<int>& citations) {
int l=1,r=citations.size(),mid;
while(l<r){
mid = (l+r+1)/2;
if(check(mid,citations))l=mid;
else r=mid-1;
}
if(check(l,citations))return l;
else return 0;
}
};
因为数组citations是单调递增的,所以check函数也可以用二分优化
最终优化如下
class Solution {
public:
bool check(int h,vector<int>& citations){
int l=0,r=citations.size()-1,mid;
while(l<r){
mid = (l+r)/2;
if(citations[mid]>=h)r=mid;
else l=mid+1;
}
if(citations[l]>=h && citations.size()-l>=h)return 1;
else return 0;
}
int hIndex(vector<int>& citations) {
int l=1,r=citations.size(),mid;
while(l<r){
mid = (l+r+1)/2;
if(check(mid,citations))l=mid;
else r=mid-1;
}
if(check(l,citations))return l;
else return 0;
}
};
这里需要注意一点,如果citations.size()-l>=h说明一定有h个元素大于等于h
275. H 指数 II--Leetcode_二分的更多相关文章
- Leetcode之二分法专题-275. H指数 II(H-Index II)
Leetcode之二分法专题-275. H指数 II(H-Index II) 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. ...
- Java实现 LeetCode 275 H指数 II
275. H指数 II 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高 ...
- 275 H-Index II H指数 II
这是 H指数 进阶问题:如果citations 是升序的会怎样?你可以优化你的算法吗? 详见:https://leetcode.com/problems/h-index-ii/description/ ...
- [LeetCode] 275. H-Index II H指数 II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize ...
- [Swift]LeetCode275. H指数 II | H-Index II
Given an array of citations sorted in ascending order (each citation is a non-negative integer) of a ...
- 275. H 指数 II--Leetcode_暴力
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/h-index-ii 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题目的大意是 ...
- [LeetCode] 274. H-Index H指数
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- [LeetCode] H-Index 求H指数
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- H指数
H指数是用来综合衡量学者发表论文的数量和质量的指标,若某学者共发表N篇论文,H指数是指存在h 篇论文至少每篇有h 引用量,剩下的N-h篇中,每篇都不超过h引用量 计算H指数的方法:1.排序法思路:先将 ...
随机推荐
- [第18届 科大讯飞杯 J] 能到达吗
能到达吗 题目链接:牛客5278 J 能到达吗 Description 给定一个 \(n\times m\) 的地图,地图的左上角为 \((1, 1)\) ,右下角为 \((n,m)\). 地图上有 ...
- python 的 @staticmethod和@classmethod和普通实例方法
参考:https://www.huaweicloud.com/articles/12607084.html https://blog.csdn.net/qq_30708445/article/deta ...
- C# 读写文件从用户态切到内核态,到底是个什么流程?
一:背景 1. 一个很好奇的问题 我们在学习 C# 的过程中,总会听到一个词叫做 内核态 ,比如说用 C# 读写文件,会涉及到代码从 用户态 到 内核态 的切换,用 HttpClient 获取远端的数 ...
- 国内外组态软件对比分析(InTouch、WinCC、iFix、iNeuOS)
在我国自动化控制领域应用较广泛的工业自动化组态软件有Wonderware公司InTouch.西门子公司Wincc.GE公司iFix.国内也有一些传统组态软件厂商,使用的功能和形式基本上十分类似,受当时 ...
- 一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推
迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"加班使我快乐". 面试官: ...
- InheritableThreadLocal 在线程池中进行父子线程间消息传递出现消息丢失的解析
在日常研发过程中,我们经常面临着需要在线程内,线程间进行消息传递,比如在修改一些开源组件源码的过程中,需要将外部参数透传到内部,如果进行方法参数重载,则涉及到的改动量过大,这样,我们可以依赖Threa ...
- 从区划边界geojson中查询经纬度坐标对应的省市区县乡镇名称,开源Java工具,内存占用低、高性能
目录 坐标边界查询工具:AreaCity-Query-Geometry 性能测试数据 测试一:Init_StoreInWkbsFile 内存占用很低(性能受IO限制) 测试二:Init_StoreIn ...
- 论HashMap、Hashtable、TreeMap、LinkedHashMap的内部排序
参考文章 论HashMap.Hashtable.TreeMap.LinkedHashMap的内部排序
- P3480 [POI2009]KAM-Pebbles 题解
题目链接 首先,这道题看上去就是个博弈论,很显然的 \(Nim\) 游戏. 因为每一个的取法都和它的上一位有关. 有一种非常显然的转换方式 :我们把这若干堆石子从前向后做一个差分 . 我们记 \(a_ ...
- 隐私计算FATE-多分类神经网络算法测试
一.说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测. 二分类算法:是指待预测的 label 标签的取值只有两种:直白来 ...