0%

leetCode-275:H-Index II

问题描述

给定一个排序的整数数组,代表一个作为每篇文章的引用次数,要求在 log(n) 的时间复杂度内找出这个作者的H指数(该作者 n 篇文章中总共有 h 篇文章被引用了至少 h 次,剩下的 n - h 篇文章的引用次数不多于 h,如果 h 值有多个,取最大的那个)。题目链接:**点我**

样例输入输出

输入:[0,1,3,5,6]

输出:3

输入:[1,2,100]

输出:2

问题解法

此题跟 LeetCode-274 类似,只不过本题给出的数组是已经排序好的,同时要求时间复杂度为 log(n)。因此可以按照 LeetCode-274 的思路,在这基础上进行二分查找即可。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int hIndex(int[] citations) {
int start = 0;
int end = citations.length - 1;
while (start <= end) {
int middle = (start + end) / 2;
if (citations[middle] == citations.length - middle) {
return citations.length - middle;
}

if (citations[middle] < citations.length - middle) {
start = middle + 1;
} else {
end = middle - 1;
}
}

return citations.length - start;
}
}