我在LeetCode上找到了以下代码片段,可以有效地找到研究人员的h索引。维基百科将h-index定义为“如果他/她的N篇论文中每篇论文至少引用h,那么科学家就有索引h,而其他N-h论文每篇论文的引用次数不超过h。”
public class Solution {
// 9.3 70 years diaoZhaTian China jiaYou
public int hIndex(int[] citations) {
int length = citations.length;
if (length == 0) {
return 0;
}
int[] array2 = new int[length + 1];
for (int i = 0; i < length; i++) {
if (citations[i] > length) {
array2[length] += 1;
} else {
array2[citations[i]] += 1;
}
}
int t = 0;
int result = 0;
for (int i = length; i >= 0; i--) {
t = t + array2[i];
if (t >= i) {
return i;
}
}
return 0;
}
}
虽然我理解第一个for循环的目的(计算各种引用的频率),但第二个循环背后的直觉究竟是什么?当累积和(h-index
)变得大于或等于索引时,索引如何t
?
答案 0 :(得分:0)
请注意,第二个循环倒计时,而不是向上 - 所以累积总和是&#34;至少i
引用的论文数量&#34 ;;因此,循环找到最大值i
,其中论文数量大于引用次数 - 这正是h指数的定义。