算法记录
LeetCode 题目:
  给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照升序排列 。计算并返回该研究者的 h 指数。
  请你设计并实现对数时间复杂度的算法解决此问题。 <hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
说明
一、题目
输入: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; }}
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
总结
二分查找。
原文:https://juejin.cn/post/7101655046521094157