算法记录
LeetCode 题目:
给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h 指数是指他的总共有 h 篇论文分别被引用了至少 h 次。且其余的 n - h 篇论文每篇被引用次数不超过 h 次。
如果 h 有多种可能的值,h 指数是其中最大的那个。
说明
一、题目
输入:citations = [3,0,6,1,5]
输出:3
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
由于研究者有 3 篇论文每篇至少被引用了 3 次,其余两篇论文每篇被引用不多于 3 次,所以她的 h 指数是 3。
复制代码
二、分析
- 因为最开始我们可以假设所有的论文引用次数都大于零,这个肯定是成立的,之后遍历整个数组,每出现一个比当前遍历元素还大的引用就可以认为当前不是最佳的论文数,需要增加。
- 但是如果直接进行遍历的话可能会出现小的引用都被用来增加结果数据了,这样就会导致最中的数据比较大,因此我们需要先进行排序。
- 从大往小遍历,我们每循环一次的数据如果当前引用比我们文章数大,则表示这篇文章可以纳入我们的高引用序列中的,直到最后不能增加数量结束。
class Solution {
public int hIndex(int[] citations) {
Arrays.sort(citations);
int ret = 0, n = citations.length;
for(int i = n - 1; i >= 0; i--) {
if(citations[i] > ret) {
ret++;
}
}
return ret;
}
}
复制代码
总结
脑筋急转弯。