题目链接,描述
https://www.lintcode.com/problem/1304
给定一个研究员的引用量数组(每个引用量都是一个非负整数)。请计算该研究员的H指数。一个研究者的H指数为h,意味着他的论文中,有h篇有至少有h个引用量。如果有很多可取的h,则最大的作为h指数。样例
样例1输入: citations = [3, 0, 6, 1, 5]
输出: 3
解释:
研究者有5篇论文,每一篇的引用量为3,0,6,1,5。因为研究者有三篇论文至少有3个引用,而剩下两篇则引用不足3次,所以他的H指数为3
样例2输入: citations = [5, 5, 5, 5, 5]
输出: 5
解释:
研究者有5篇论文,每一篇的引用量为5, 5, 5, 5, 5。因为研究者有5篇论文至少有5个引用,所以他的H指数为5
思路
本意需要理解,个人觉得不需要用二分什么的,先排序再直接进行循环,取citations[i]>=length-i即返回。注意取得符合条件的第一个数时就要返回,因为在这个数后面的肯定是都成立的。
参考代码
public class Solution {/*** @param citations: a list of integers* @return: return a integer*/public int hIndex(int[] citations) {/*本意需要理解,个人觉得不需要用二分什么的,先排序再直接进行循环,取citations[i]>=length-i即返回。注意取得符合条件的第一个数时就要返回,因为在这个数后面的肯定是都成立的。*//*//下面的答案也行Arrays.sort(citations);int h =0,i=citations.length-1;while (i>=0&& citations[i]>h){h++;i--;}*/int n= citations.length;Arrays.sort(citations);int h =0;for (int i = 0; i <n ; i++) {if(citations[i] >= n-i){h=n-i;return h;}}return 0;}
}