leetcode 275. H指数 II medium
题目描述:
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。
h 指数的定义: h_index代表有h篇论文的引用次数至少为h次。h指数为最大的h_index
解题思路:
二分,因为h指数的取值范围是0~nums.size()。
注意: 我们这里二分的不是数组,二分的是h指数的取值范围。
而要求最大的,所以用最后一个满足条件的二分。
而check函数就是 假如有mid篇文章被引次数大于等于mid 即可,也就是倒数第mid篇被引次数要大于等于mid。
代码:
class Solution {
public:
int hIndex(vector<int>& nums) {
int left=0,right=nums.size();
while(left<right){
int mid=(long long) left+ right +1 >>1;
// 假如倒数第mid篇论文引用次数大于mid
if(nums[nums.size()-mid]>=mid)
left=mid;
else
right=mid-1;
}
return left;
}
};