首页 > 其他分享 >275. H 指数 II--Leetcode_二分

275. H 指数 II--Leetcode_二分

时间:2022-08-19 10:56:01浏览次数:86  
标签:二分 指数 -- mid II int citations 275 size

来源:力扣(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

标签:二分,指数,--,mid,II,int,citations,275,size
From: https://www.cnblogs.com/MZ0o0/p/16601262.html

相关文章

  • Python-05输入输出
    Python输入语句:     在Python3.x中raw_input()和input()进行了整合,去除raw_input(),仅仅保留了Input()函数,其接收任意输入,将所有输入默认为字符串处理,并返回字符......
  • 关于服务器部署了dubbo服务提供者,但是在外网无法调用到该服务的问题
    1.修改host文件 vim /etc/hosts 2.酱紫改  106.13.26.144ls2rZsaaHi106.13.26.144是公网ip,ls2rZsaaHi是主机名主机名怎么看? hostname查看主机名 保存hosts文......
  • Postgresql之基础
      在默认配置下,之允许本机访问Postgresql#切换到postgres用户su-postgresLastlogin:WedMar113:16:48CST2017onpts/1-bash-4.2$psqlpsql(9.2.1......
  • 【题解】CF1720C
    题意简述给你一个01矩阵,每一次你可以在这个矩阵中找到一个\(L\)型,将它全部变成0。\(L\)型的定义是在一个\(2*2\)矩阵中,除开一个角之外的图形,其中必须包含至少一个......
  • react中父子组件相互传值或方法
    这个老师写的不错,写在这样方便自己以后的查看。详见原创作者的链接地址:https://blog.csdn.net/sinat_36359516/article/details/120011005......
  • Centos7操作系统Tomcat启动慢的问题
    现象在一次CentOS7系统中安装Tomcat,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是Session引起的随机数问题导致的。Tocmat的SessionID是通过SHA1算法计算得到的,......
  • cron表达式
    点击查看代码每隔5秒执行一次:*/5****?每隔1分钟执行一次:0*/1***?每天23点执行一次:0023**?每天凌晨1点执......
  • nginx.conf 配置文件
     一、位置vim/usr/local/nginx/conf/nginx.conf 二、配置文件中的内容(包含三部分) 1、全局块:配置服务器整体运行的配置指令从配置文件开始到events块之间的内......
  • 2022-08-19 第二小组 张di
    JDBCStatement的不足1.大量的拼接,可读性低 2.sql注入Connectionconn=null;Statementstmt=null;ResultSetre=null;conn=GetCon......
  • Delphi 经典游戏程序设计40例 的学习 例23 行动的记录与重现
      unitR23;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,StdCtrls;typeTPatDt=......