思路
题目解析,主要是理解h指数的定义。
明白了题目,那么这道题就十分简单了,无非就是找到最后一个满足h指数的位置,那我们可以二分答案,l从0
开始、r从n
开始。因为案例中可能存在[0]
的情况。因此l从0
开始。
大致框架就是check(mid)
- true,
l = mid
- fasle
r = mid - 1
现在就是如何实现check函数,满足h指数那么至少要有h篇论文.
那么就需要保证至少,[该数组长度 - 当前位置的下标]
>= 二分答案。这样才能够保证符合条件,例如上图所示至少要保证[5 - 3] = 2
下标为2
的位置上的数一定要大于等mid。
代码
class Solution {
public int hIndex(int[] citations) {
int n = citations.length;
int l = 0;
int r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
if (citations[n - mid] >= mid) l = mid;
else r = mid - 1;
}
return l;
}
}