博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
h引用(数组中有h个数大于等于h,其余小于)H-Index
阅读量:6675 次
发布时间:2019-06-25

本文共 2210 字,大约阅读时间需要 7 分钟。

hot3.png

问题:

Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.

According to the : "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."

For example, given citations = [3, 0, 6, 1, 5], which means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively. Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, his h-index is 3.

Note: If there are several possible values for h, the maximum one is taken as the h-index.

解决:

【题意】有h篇论文的引用数目大于等于h,其余引用小于h。

① 排序法。先将数组排序,我们就可以知道对于某个引用数,有多少文献的引用数大于这个数。对于引用数citations[i],大于该引用数文献的数量是citations.length - i,而当前的H-Index则是Math.min(citations[i], citations.length - i),我们将这个当前的H指数和全局最大的H指数来比较,得到最大H指数。

1)

class Solution { //4ms

    public int hIndex(int[] citations) {
        Arrays.sort(citations);
        int h = 0;//全局最大的H指数
        for (int i = 0;i < citations.length;i ++){
            int curH = Math.min(citations[i],citations.length - i);//得到当前的H指数
            if (curH > h){
                h = curH;
            }
        }
        return h;
    }
}

2)

class Solution{//2ms

    public int hIndex(int[] citations) {
        Arrays.sort(citations);
        for (int i = 0; i < citations.length; i ++) {
            if (citations[i] >= citations.length - i) {
                return citations.length - i;
            }
        }
        return 0;
    }
}

② 数组映射法。我们额外使用一个大小为N+1的数组dp。dp[i]表示有多少文章被引用了i次,这里如果一篇文章引用大于N次,我们就将其当为N次,因为H指数不会超过文章的总数。

1)

class Solution { //1ms

    public int hIndex(int[] citations) {
        int len = citations.length;
        int[] dp = new int[len + 1];
        for (int i = 0;i < len;i ++){//统计各个引用次数对应多少篇文章
            int index = citations[i] <= len ? citations[i] : len;
            dp[index] += 1;
        }
        int count = 0;
        for (int i = len;i > 0;i --){
            count+= dp[i];
            if (count >= i){
                return i;
            }
        }
        return 0;
    }
}

2)

class Solution { //1ms

    public int hIndex(int[] citations) {
        int[] dp = new int[citations.length + 1];
        for (int n : citations){
            if (n >= citations.length){
                dp[citations.length] ++;
            }else{
                dp[n] ++;
            }
        }
        int count = 0;
        for (int i = citations.length;i > 0;i --){
            count += dp[i];
            if (count >= i){
                return i;
            }
        }
        return 0;
    }
}

转载于:https://my.oschina.net/liyurong/blog/1591813

你可能感兴趣的文章
mvc SelectList selected失效的解决方法
查看>>
JAVA 设计模式 中介者模式
查看>>
我的软件工程课目标
查看>>
var a={n:1}; var b=a; a.x=a={n:2}; console.log(a.x); console.log(b.x);
查看>>
【HDOJ】3016 Man Down
查看>>
window.open打开新页面,并将本页数据用过url传递到打开的页面;需要两个页面;...
查看>>
查看本机IP分为两种情况:
查看>>
Scala进阶之路-Scala特征类与unapply反向抽取
查看>>
洛谷P3057 [USACO12NOV]远处的牧场Distant Pastures
查看>>
hdu3415 Max Sum of Max-K-sub-sequence 单调队列
查看>>
6421B Lab2 DHCP的配置及故障排除
查看>>
[C# 基础知识梳理系列]专题一:深入解析委托——C#中为什么要引入委托
查看>>
FOSCommentBundle功能包:其它添加评论到页面的方法
查看>>
Exchange 2016共享邮箱不保存已发送邮件的问题
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
SQL Server 2012笔记分享-40:自动维护索引
查看>>
C/C++各种系统开发环境搭建
查看>>
Linq技术四:动态Linq技术 -- Linq.Expressions
查看>>
ARC __bridge modifiers demystified
查看>>
[转]HTML字符实体(Character Entities),转义字符串(Escape Sequence)
查看>>