zoukankan      html  css  js  c++  java
  • 274. H-Index

        /*
         * 274. H-Index
         * 1.2 by Mingyang
         * 先将数组排序,我们就可以知道对于某个引用数,有多少文献的引用数大于这个数。对于引用数citations[i],
         * 大于该引用数文献的数量是citations.length - i,
         * 而当前的H-Index则是Math.min(citations[i], citations.length - i),
         * 我们将这个当前的H指数和全局最大的H指数来比较,得到最大H指数。
         */
           public int hIndex(int[] citations) {
                // 排序
                Arrays.sort(citations);
                int h = 0;
                for(int i = 0; i < citations.length; i++){
                    // 得到当前的H指数
                    int currH = Math.min(citations[i], citations.length - i);
                    if(currH > h){
                        h = currH;
                    }
                }
                return h;
            }
          /*
           *也可以不对数组排序,我们额外使用一个大小为N+1的数组stats。
           *stats[i]表示有多少文章被引用了i次,
           *这里如果一篇文章引用大于N次,我们就将其当为N次,
           *因为H指数不会超过文章的总数。为了构建这个数组,
           *我们需要先将整个文献引用数组遍历一遍,对相应的格子加一。
           *统计完后,我们从N向1开始遍历这个统计数组。
           *如果遍历到某一个引用次数时,大于或等于该引用次数的文章数量,
           *大于引用次数本身时,我们可以认为这是H指数。之所以不用再向下找,
           *因为我们要取最大的H指数。那如何求大于或等于某个引用次数的文章数量呢?
           *我们可以用一个变量,从高引用次的文章数累加下来。因为我们知道,如果有x篇文章的引用大于等于3次,
           *那引用大于等于2次的文章数量一定是x加上引用次数等于2次的文章数量。 
           */
           public int hIndex2(int[] citations) {
                int[] stats = new int[citations.length + 1];
                int n = citations.length;
                // 统计各个引用次数对应多少篇文章
                for(int i = 0; i < n; i++){
                    stats[citations[i] <= n ? citations[i] : n] += 1;
                }
                int sum = 0;
                // 找出最大的H指数
                for(int i = n; i > 0; i--){
                    // 引用大于等于i次的文章数量,等于引用大于等于i+1次的文章数量,加上引用等于i次的文章数量 
                    sum += stats[i];
                    // 如果引用大于等于i次的文章数量,大于引用次数i,说明是H指数
                    if(sum >= i){
                        return i;
                    }
                }
                return 0;
            }
  • 相关阅读:
    #一点杂记
    《洛谷P3373 【模板】线段树 2》
    《Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020
    《牛客练习赛72C》
    《hdu2819》
    《hdu2818》
    《Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)》
    《51nod1237 最大公约数之和 V3》
    对输入的单词进行排序
    快速排序
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5619051.html
Copyright © 2011-2022 走看看