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 has5
papers in total and each of them had
received 0, 1, 3, 5, 6
citations respectively.
Since the researcher has3
papers with at least3
citations each and the remaining
two with no more than3
citations 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
citations
is 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;
}
};
网友评论