lintcode 1304 · H指数 【中等 数组】

题目链接,描述

https://www.lintcode.com/problem/1304

给定一个研究员的引用量数组(每个引用量都是一个非负整数)。请计算该研究员的H指数。

一个研究者的H指数为h,意味着他的论文中,有h篇有至少有h个引用量。

如果有很多可取的h,则最大的作为h指数。

样例
样例1

输入: citations = [3, 0, 6, 1, 5]
输出: 3
解释:
研究者有5篇论文,每一篇的引用量为30615。因为研究者有三篇论文至少有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;
    }
}

你可能感兴趣的:(算法)