来源:力扣(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_二分的更多相关文章

  1. Leetcode之二分法专题-275. H指数 II(H-Index II)

    Leetcode之二分法专题-275. H指数 II(H-Index II) 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. ...

  2. Java实现 LeetCode 275 H指数 II

    275. H指数 II 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. h 指数的定义: "h 代表"高 ...

  3. 275 H-Index II H指数 II

    这是 H指数 进阶问题:如果citations 是升序的会怎样?你可以优化你的算法吗? 详见:https://leetcode.com/problems/h-index-ii/description/ ...

  4. [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 ...

  5. [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 ...

  6. 275. H 指数 II--Leetcode_暴力

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/h-index-ii 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题目的大意是 ...

  7. [LeetCode] 274. H-Index H指数

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...

  8. [LeetCode] H-Index 求H指数

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...

  9. H指数

    H指数是用来综合衡量学者发表论文的数量和质量的指标,若某学者共发表N篇论文,H指数是指存在h 篇论文至少每篇有h 引用量,剩下的N-h篇中,每篇都不超过h引用量 计算H指数的方法:1.排序法思路:先将 ...

随机推荐

  1. 一分钟学会如何自定义小程序轮播图(蜜雪冰城Demo)

    最近开发小程序项目用到了轮播图,默认的有点单调,作为后端程序员,研究一番最终实现了.本文会从思路,代码详细介绍,相信读过此文后,不管以后在开发中碰到轮播图还是需要自定义修改其他的样式都可以按这个思路解 ...

  2. 树莓派使用Docker部署EdgeX(jakarta版本)

    使用Docker部署EdgeX 老师安排我搞边缘计算,搞了很久都没能明白边缘计算是什么,甚至对其兴趣不大,前一阵弄好了lorawan网关,该做网关内部的边缘计算了,发现自己已经慢慢地学了进去,总是想要 ...

  3. Redis集群搭建 三主三从

    Redis集群介绍 Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存.Redis在3.0版本之前只支持单实例模式 虽然支持主从模式,哨兵模式 ...

  4. 架构师必备:HBase行键设计与应用

    首先要回答一个问题,为何要使用HBase? 随着业务不断发展.数据量不断增大,MySQL数据库存在这些问题: MySQL支持的数据量为TB级,不能一直保留历史数据.而HBase支持的数据量为PB级,适 ...

  5. .NET性能优化-推荐使用Collections.Pooled(补充)

    简介 在上一篇.NET性能优化-推荐使用Collections.Pooled一文中,提到了使用Pooled类型的各种好处,但是在群里也有小伙伴讨论了很多,提出了很多使用上的疑问. 所以特此写了这篇文章 ...

  6. CabloyJS - GitHub Readme

    简体中文 | English CabloyJS CabloyJS是一款顶级NodeJS全栈业务开发框架, 基于KoaJS + EggJS + VueJS + Framework7 文档 官网 & ...

  7. Canal-监听数据库表的变化

    1. 简介 Canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费功能. 工作原理 Mysql主备复制原理 MySQL master 将数据变更 ...

  8. 想学嵌入式?要不一起玩 Arduino 吧

    作者:HelloGitHub-Anthony 这里是 HelloGitHub 推出的<讲解开源项目>系列,本期介绍的是如何用开源硬件开发平台 Arduino,自己动手做一个温湿度显示器. ...

  9. python小题目练习(13)

    题目:封装用户的上网行为 实现代码: """Author:mllContent:封装用户的上网行为Date:2020-01-19"""def ...

  10. .Net下极限生产力之efcore分表分库全自动化迁移CodeFirst

    .Net下极限生产力之分表分库全自动化Migrations Code-First ## 介绍 本文ShardinfCore版本x.6.x.x+ 本期主角: - [`ShardingCore`](htt ...