【每日一题Day363】LC275H 指数Ⅱ | 二分答案

简介: 【每日一题Day363】LC275H 指数Ⅱ | 二分答案

H 指数Ⅱ【LC275】

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

h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n 篇论文中)总共有 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

目录
相关文章
|
6月前
【每日一题Day273】LC860柠檬水找零 | 贪心
【每日一题Day273】LC860柠檬水找零 | 贪心
41 0
【每日一题Day273】LC860柠檬水找零 | 贪心
|
6月前
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
【每日一题Day312】LC2240买钢笔和铅笔的方案数 | 完全背包 数学
59 0
|
6月前
|
存储 人工智能 算法
【每日一题Day348】LC137只出现一次的数字Ⅱ | 状态转移
【每日一题Day348】LC137只出现一次的数字Ⅱ | 状态转移
46 0
|
6月前
【每日一题Day366】LC2103环和杆 | 状态压缩
【每日一题Day366】LC2103环和杆 | 状态压缩
48 0
|
6月前
|
机器学习/深度学习
【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心
【每日一题Day125】LC1326灌溉花园的最少水龙头数目 | 动态规划 贪心
55 0
|
6月前
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
【每日一题Day302】LC849到最近的人的最大距离 | 贪心+分类讨论
54 0
|
6月前
|
存储
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
【每日一题Day275】LC771宝石与石头 | 哈希表 状态压缩
43 0
|
6月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
50 1
|
6月前
【每日一题Day171】LC1125最小的必要团队 | 01背包 位运算
【每日一题Day171】LC1125最小的必要团队 | 01背包 位运算
44 1
|
6月前
【每日一题Day362】LC274H 指数 | 二分答案
【每日一题Day362】LC274H 指数 | 二分答案
38 0