1、题目描述
Given an array of citations **sorted in ascending order **(each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.
According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than *h *citations each."
Example:
Input:
citations = [0,1,3,5,6]
Output: 3
Explanation:[0,1,3,5,6]means the researcher has5papers in total and each of them had
received 0, 1, 3, 5, 6citations respectively.
Since the researcher has3papers with at least3citations each and the remaining
two with no more than3citations each, her h-index is3.
Note:
If there are several possible values for h, the maximum one is taken as the h-index.
Follow up:
- This is a follow up problem to H-Index, where
citationsis now guaranteed to be sorted in ascending order. - Could you solve it in logarithmic time complexity?
2、问题描述:
- 求一个人的h因子,就是一个人的总共的文章为n,那么,h就是这n篇文章被引用次数超过h的最少有h篇。
3、问题关键:
- 有序数组,二分法。
- 第mid篇被引用的次数nums[mid],则 总共有(n - mid)篇因子超过nums[mid].
- 找到最小的mid。迭代条件,if(n - mid <= nums[mid]) r = mid;(左半区间)。
4、C++代码:
class Solution {
public:
int hIndex(vector<int>& nums) {
if (nums.empty()) return 0;
int n = nums.size();
int l = 0, r = n - 1;
while(l < r) {
int mid = l + r >> 1;
if (n - mid <= nums[mid]) r = mid;//因为序号是0开始的,所以n - mid,是超过的数量。
else l = mid + 1;
}
if (n - l <= nums[l]) return n - l;//n - l就是超过的数量。
return 0;
}
};









网友评论