题目描述
题目描述
给定一个科研工作者的一系列论文的引用次数(引用次数是非负整数),已经从小到大排好序,请计算他的h因子。
h因子的定义:一个科学家如果有 h 篇文章的引用次数至少是 hh,并且其他文章的引用次数不超过 h,我们就说他的影响因子是 h。
注意: 如果一个人有多个可能的 h,返回最大的 h 因子。
进一步:
这道题目是LeetCode 274.H-Index的升级版,citations保证是严格递增的;
你能否给出时间复杂度是 O(logn)O(logn) 级别的算法?
样例
样例
输入:所有文章的引用次数 = [0,1,3,5,6]
输出:3
解释:[0,1,3,5,6] 表示一共有5篇文章,每篇文章分别被引用
0, 1, 3, 5, 6次。由于共有3篇文章的引用次数大于等于3,
且其他两篇文章的引用次数不超过3,所以h因子是3。
**
这题属于最大值中最小数
如果找到合适的k,i>k时一定符合h因子,i<k时可能不符合,那么我们不断向i<k的方向逼近,找到这个临界值就是最小k,h=n-k最大
class Solution {
public:
int hIndex(vector<int>& citations) {
int n=citations.size();
if(!n)return 0;
int l=0,r=n-1;
while(l<r)
{
int mid=l+r>>1;
if(n-mid<=citations[mid]) r=mid;//n-mid就是h
else l=mid+1;
}
if(n-l<=citations[l]) return n-l;//判断最后位置是否符合要求
return 0;
}
};