【每日一题Day362】LC274H 指数 | 二分答案

简介: 【每日一题Day362】LC274H 指数 | 二分答案

H 指数【LC274】

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

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


来晚了 奔波的一天

  • 思路
  • 二段性:存在最大值y使,少于等于y的数值一定满足条件;大于y的数值一定不满足条件
  • 二分答案y
  • 引用次数大于等于y的论文数目大于等于y,那么向右搜索获得更大的y
  • 引用次数大于等于y的论文数目小于y,那么向左搜索获得更大的y
  • check:排序后可以快速算出引用次数大于等于y的论文数目
  • 实现
class Solution {
    public int hIndex(int[] citations) {
        int n = citations.length;
        Arrays.sort(citations);
        int l = 1, r = n;
        int res = 0;
        while (l <= r){
            int mid =(l + r) >> 1;
            if (check(citations, mid) >= mid){
                res = Math.max(res, mid);
                l = mid + 1;            
            }else{
                 r = mid - 1;
            }
        }
        return res;
    }
    public int check(int[] citations, int target){
        int n = citations.length;
        int l = 0, r = n - 1;
        while (l <= r){
            int mid = l + r >> 1;
            if (citations[mid] < target){
                l = mid + 1;
            }else{
                r = mid - 1;
            }
        }
        // l为第一个符合的下标
        return n - l;// 大于等于target的引用次数的数目
    }
}

image.png

目录
相关文章
|
7月前
【每日一题Day273】LC860柠檬水找零 | 贪心
【每日一题Day273】LC860柠檬水找零 | 贪心
43 0
【每日一题Day273】LC860柠檬水找零 | 贪心
|
7月前
|
算法
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
62 0
|
7月前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
54 0
|
7月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
60 0
|
7月前
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
63 0
|
7月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
58 1
|
7月前
【每日一题Day319】LC2594修车的最少时间 | 二分答案
【每日一题Day319】LC2594修车的最少时间 | 二分答案
39 0
|
7月前
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
47 0
|
7月前
【每日一题Day224】LC2517礼盒的最大甜蜜度 | 二分答案
【每日一题Day224】LC2517礼盒的最大甜蜜度 | 二分答案
35 0
|
7月前
【每日一题Day261】LC16最接近的三数之和 | 双指针
【每日一题Day261】LC16最接近的三数之和 | 双指针
41 0