【二分查找】275. H 指数 II

简介: 【二分查找】275. H 指数 II在另一篇博客里讲过二分法的模板:《二分法的模板讲解》

📍前言

🕺作者: 迷茫的启明星


学习路线

C语言从0到1

C++初阶

数据结构从0到1

😘欢迎关注:👍点赞🙌收藏✍️留言


🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!


持续更新中~


【二分查找】275. H 指数 II

在另一篇博客里讲过二分法的模板:

《二分法的模板讲解》


问题描述

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


h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 n 篇论文中,总共有 h 篇论文分别被引用了至少 h 次。


要求设计并实现对数时间复杂度的算法解决此问题。


示例

示例 1:


输入:citations = [0,1,3,5,6]


输出:3


解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6 次。


由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3 。


解题思路

本题要求求解 h 指数,可以使用二分查找算法。首先,我们需要找到一个合适的中间点 mid。然后,我们判断 citations[mid] 是否满足 citations[mid] >= citations.size() - mid。如果满足,说明在 mid 左侧可能有更多的论文满足 h 指数的定义,因此将 l 设置为 mid;否则,将 r 设置为 mid。


二分查找的复杂度为 O(log n),因此整个算法的复杂度也是 O(log n)。

代码实现

以下是基于二分查找的解决方案,时间复杂度为 O(log n)。


class Solution {
public:
    int hIndex(vector<int>& citations) {
        int l=-1,r=citations.size();
        int mid;
        while(r-l>1)
        {
            mid=(r+l)>>1;
            if(citations[mid]>=(citations.size()-mid))
                r=mid;
            else
                l=mid;
        }
        return citations.size()-r;
    }
};



总结

本文描述了一种基于二分查找的解决方案,用于求解给定整数数组 citations 的 h 指数。这种解决方案的时间复杂度为 O(log n),能够有效地解决问题。


相关文章
|
7月前
|
算法 Java 程序员
认识复杂度、对数器、二分法
认识复杂度、对数器、二分法
61 1
|
7月前
|
算法 程序员
【算法训练-二分查找 三】【特殊二分】寻找峰值
【算法训练-二分查找 三】【特殊二分】寻找峰值
64 0
|
7月前
|
算法 程序员
【算法训练-二分查找 四】【模拟二分】X的平方根
【算法训练-二分查找 四】【模拟二分】X的平方根
43 0
|
算法
【算法专题突破】二分查找 - x 的平方根(18)
【算法专题突破】二分查找 - x 的平方根(18)
75 0
|
7月前
|
算法 测试技术 C#
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
【折半处理 二分查找】1755. 最接近目标值的子序列和
|
7月前
|
C++
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
|
Java
简单计算时间复杂度
简单计算时间复杂度
37 1
|
机器学习/深度学习 算法
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
149 0
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
|
算法
LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
今天讲 LeetCode 单周赛第 340 场,今天状态不好,掉了一波大分。
107 0
|
机器学习/深度学习 算法 Java
如此简单的时间复杂度计算方法:大O渐进法,你确定不进来康康
如此简单的时间复杂度计算方法:大O渐进法,你确定不进来康康
167 0
如此简单的时间复杂度计算方法:大O渐进法,你确定不进来康康
下一篇
DataWorks