leetcode11(H 指数)
给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数。计算并返回该研究者的 h
指数。
根据维基百科上 h 指数的定义:h
代表“高引用次数” ,一名科研人员的 h
指数 是指他(她)至少发表了 h
篇论文,并且 至少 有 h
篇论文被引用次数大于等于 h
。如果 h
有多种可能的值,h
指数 是其中最大的那个。
思路:
h有三个参数的限制:
数组长度(论文数),数组内元素大小范围(论文被引用次数),特定元素出现次数(达到要求的论文数)
所以,可以不用考虑数组长度(论文数),因为特定元素出现次数(达到要求的论文数)已经隐含要求
那么现在要解决论文被引用次数和达到要求的论文数
我们可以对数组内所有出现的元素,即被引用次数进行分别统计
统计数组中达到该引用数量的论文数,即nums数组中大于等于nums【i】的元素数
可以遍历,但这样时间较长
我们先对数组内元素进行升序排序,0-1-2-3……,则达到要求的文章数与他们的排名相反。
比如,共5篇文章,被引数分别为0,1,2,4,6,那么达到对应被引数的文章数分别为5,4,3,2,1
这样,我们取nums.length-i和nums[i]的最小值min,表示被引次数和符合的文章数同时达到了min,符合h要求。再取所有符合条件的min中的最大值即可
class Solution {public int hIndex(int[] citations) {Arrays.sort(citations);int[]reslut= new int[citations.length];for(int i=0;i<citations.length;i++){reslut[i]=Math.min(citations[i],citations.length-i);}int max=0;for(int i=0;i<citations.length;i++){if(reslut[i]>max){max=reslut[i];}}return max;}
}