LeetCode力扣第274题(H指数)
题目链接:. - 力扣(LeetCode)
题目描述:
给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数。计算并返回该研究者的 h
指数。
根据维基百科上 h 指数的定义:h
代表“高引用次数” ,一名科研人员的 h
指数 是指他(她)至少发表了 h
篇论文,并且 至少 有 h
篇论文被引用次数大于等于 h
。如果 h
有多种可能的值,h
指数 是其中最大的那个。
思路方法:
排序,再比较。
1.首先我们可以将初始的H指数设为0,然后将引用排序,并且对排序后的数组从大到小遍历。
2.根据 H 指数的定义,如果当前H指数为h并且在遍历过程中找到当前值,citations[i]>h,则说明我们找到了一篇被引用了至少h+1次的论文,所以将现有的h值加1。
3.继续遍历直到h无法继续增大,最后返回h作为最终答案。
C++代码描述如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
sort(citations.begin(),citations.end());//先排序,然后从引用次数从大到小便利
int h=0,i=citations.size()-1;//初始的h引用设置为0
while(i>=0&&citations[i]>h){ //找到当前至少引用h+1次的论文
h++;//最少引用加1
i--;//继续便利寻找
}
return h;
}
};
复杂度分析:
时间复杂度:O(nlogn),其中 n为数组的长度。即为排序的时间复杂度。
空间复杂度:O(logn),其中 n为数组的长度。即为排序的空间复杂度。
参考资料:. - 力扣(LeetCode)