LeetCode-H 指数 II

算法记录

LeetCode 题目:

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

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


说明

一、题目

输入:citations = [3,0,6,1,5]
输出:3 
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
     由于研究者有 3 篇论文每篇至少被引用了 3 次,其余两篇论文每篇被引用不多于 3 次,所以她的 h 指数是 3。
复制代码

二、分析

  • 这个题相对于 H 指数 一毛一样的,只是需要计算时间为 logn 级别的。
  • 而一想到这个级别的查询计算,那肯定就是二分上场了,之前我们是通过从前向后的一步一步的遍历增加的,用二分一次就可以砍掉一半。
class Solution {
    public int hIndex(int[] citations) {
        int n = citations.length;
        int left = 0, right = n - 1;
        while (left <= right) {
            int mid = (right + left) / 2;
            if (citations[mid] >= n - mid) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return n - left;
    }
}
复制代码

总结

二分查找。

猜你喜欢

转载自juejin.im/post/7101655046521094157
今日推荐