leetcodeH指数

这段代码展示了如何使用Java计算研究者H指数,通过遍历论文引用次数数组,找出至少有h篇论文引用数大于等于h。时间复杂度为O(nlogn)。
摘要由CSDN通过智能技术生成

 

  1. int n = citations.length;: 这行代码获取了数组 citations 的长度,即研究者的论文总数。

  2. Arrays.sort(citations);: 这行代码对 citations 数组进行排序,以便后续的计算。

  3. int h = 0;: 这行代码定义了一个变量 h,用来记录当前的最大引用次数。

  4. for(int i = 0; i < n; i++) {: 这是一个for循环,遍历了 citations 数组。

  5. if(citations[i] >= n - i) {: 这行代码判断当前论文的引用次数是否大于或等于剩余未检查的论文数量。这是H指数的核心定义:一个研究者的H指数是指他至少有h篇论文的引用数大于等于h。

  6. h = n - i;: 如果满足条件,更新 h 的值为 n - i,即当前未检查的论文数量。

  7. return h;: 返回计算得到的H指数。

  8. 如果循环结束后仍未找到满足条件的H指数,则返回0,这表示该研究者的H指数为0。

这段代码的时间复杂度为O(nlogn),其中n是论文总数。这是因为代码中进行了一次排序操作,时间复杂度为O(nlogn),然后是一次线性扫描,时间复杂度为O(n)。

class Solution {
    public int hIndex(int[] citations) {
        // 获取论文总数
        int n = citations.length;
        
        // 对引用次数数组进行排序,以便后续的计算
        Arrays.sort(citations);
        
        // 初始化 H 指数为 0
        int h = 0;
        
        // 遍历引用次数数组
        for(int i = 0; i < n; i++) {
            // 判断当前论文的引用次数是否大于等于剩余未检查的论文数量
            if(citations[i] >= n - i) {
                // 如果满足条件,更新 H 指数为当前的剩余未检查的论文数量,并取最大值
                h = Math.max(h, n - i);
            }
        }
        
        // 返回计算得到的 H 指数
        return h;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值