给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数。计算并返回该研究者的 h
指数。
根据维基百科上 h 指数的定义:h
代表“高引用次数” ,一名科研人员的 h
指数 是指他(她)至少发表了 h
篇论文,并且 至少 有 h
篇论文被引用次数大于等于 h
。如果 h
有多种可能的值,h
指数 是其中最大的那个。
解法: 一道适合用来练习二分的题目,答案h具有二段性,二分枚举h,并判断是否合法即可。
class Solution {
public:
int hIndex(vector<int>& citations) {
int l=0,r=0;
for(int i=0;i<citations.size();i++)
{
r=max(r,citations[i]);
}
while(l<r)
{
int mid = (l+r+1)/2;
if(check(mid,citations))l=mid;
else r=mid-1;
}
return l;
}
bool check(int h, vector<int>&citations)
{
// >=h的 不少于h个
int cnt =0;
for(int i=0;i<citations.size();i++)
{
if(citations[i]>=h)cnt++;
}
if(cnt<h)return false;
return true;
}
};