自学内容网 自学内容网

力扣刷题Days33-274. H 指数(js)

目录

1,题目

2,代码

2.1排序

2.2计数排序

3,学习与总结

3.1排序实现的学习总结

3.2计数排序的学习总结


1,题目

给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数

根据维基百科上 h 指数的定义h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数 是其中最大的那个。

2,代码

2.1排序

/**
 * @param {number[]} citations
 * @return {number}
 */
var hIndex = function(citations) {
    citations.sort((a,b)=>a-b);
    let h = 0;
    let i = citations.length - 1;
    while(i >= 0 && citations[i] > h){
        h++;
        i--;
    }
    return h;

};

2.2计数排序

/**
 * @param {number[]} citations
 * @return {number}
 */
var hIndex = function(citations) {
    // 计数排序
    let n = citations.length;
    let total = 0;
    const counter = new Array(n+1).fill(0);
    for(let i = 0; i < n; i++){
        if(citations[i] > n){
            counter[n]++;
        }else{
            counter[citations[i]]++;
        }
    }
    for(let i = n;i>=0;i--){
        total+=counter[i];
        if(total >= i){
            return i;
        }
    }

    return 0;

};

3,学习与总结

3.1排序实现的学习总结

实现的核心:

在于 排序之后,从最大项开始判断

缺点:

算法的时间复杂度和空间复杂度都依赖排序算法的实现;

3.2计数排序的学习总结

citations数组是每篇论文的引用次数,这里使用counter数组来计算被引用0~n次的论文分别有多少篇,这个方法经常使用;

注意:

论文共有n篇,根据h指数的定义,对于被引用次数大于n的,进行特殊处理,将其统计到引用次数为n的对应数组项中;

 const counter = new Array(n+1).fill(0);
    for(let i = 0; i < n; i++){
        if(citations[i] > n){
            counter[n]++;
        }else{
            counter[citations[i]]++;
        }
    }

重点在于积累与学习实现的逻辑!


原文地址:https://blog.csdn.net/m0_51666362/article/details/137506833

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!