-
int n = citations.length;
: 这行代码获取了数组citations
的长度,即研究者的论文总数。 -
Arrays.sort(citations);
: 这行代码对citations
数组进行排序,以便后续的计算。 -
int h = 0;
: 这行代码定义了一个变量h
,用来记录当前的最大引用次数。 -
for(int i = 0; i < n; i++) {
: 这是一个for循环,遍历了citations
数组。 -
if(citations[i] >= n - i) {
: 这行代码判断当前论文的引用次数是否大于或等于剩余未检查的论文数量。这是H指数的核心定义:一个研究者的H指数是指他至少有h篇论文的引用数大于等于h。 -
h = n - i;
: 如果满足条件,更新h
的值为n - i
,即当前未检查的论文数量。 -
return h;
: 返回计算得到的H指数。 -
如果循环结束后仍未找到满足条件的H指数,则返回0,这表示该研究者的H指数为0。
这段代码的时间复杂度为O(nlogn),其中n是论文总数。这是因为代码中进行了一次排序操作,时间复杂度为O(nlogn),然后是一次线性扫描,时间复杂度为O(n)。
class Solution {
public int hIndex(int[] citations) {
// 获取论文总数
int n = citations.length;
// 对引用次数数组进行排序,以便后续的计算
Arrays.sort(citations);
// 初始化 H 指数为 0
int h = 0;
// 遍历引用次数数组
for(int i = 0; i < n; i++) {
// 判断当前论文的引用次数是否大于等于剩余未检查的论文数量
if(citations[i] >= n - i) {
// 如果满足条件,更新 H 指数为当前的剩余未检查的论文数量,并取最大值
h = Math.max(h, n - i);
}
}
// 返回计算得到的 H 指数
return h;
}
}