Java实现 H 指数经典算法,每天经典算法实战。

在这里插入图片描述

作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。

多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。

欢迎 点赞✍评论⭐收藏


算法领域知识

链接 专栏
分发糖果 算法专栏
买卖股票的最佳时机 算法专栏
跳跃游戏 算法专栏
H 指数 算法专栏

经典算法题 之 H指数

在这里插入图片描述

题目如下:

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

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

示例 1:

输入:citations = [3,0,6,1,5]
输出:3 
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
     由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3

示例 2:

输入:citations = [1,3,1]
输出:1

提示:

  • n == citations.length
  • 1 <= n <= 5000
  • 0 <= citations[i] <= 1000

实现逻辑:

首先将数组 citations 从小到大排序。然后从前向后扫描数组,如果当前遍历到的元素 citations[i] 大于 h ,那么 h 值加 1。一直重复此过程,直到 citations[i] 不再大于 h 或者遍历完数组。返回最终的 h 值即可。

Java代码实现:

public int hIndex(int[] citations) {
    // 先从小到大对数组进行排序
    Arrays.sort(citations);
    // 初始化h指数为0
    int h = 0;
    // 从前往后扫描数组
    for(int i = 0; i < citations.length; i++) {
        // 如果当前引用次数大于等于当前的h指数
        if(citations[i] >= h + 1) {
            h++;
        } else {
            // 如果当前引用次数小于当前的h指数,说明后面的元素引用次数也会小于h指数
            break;
        }
    }
    // 返回最终的h指数
    return h;
}

执行过程:

假设输入的数组为 [3,0,6,1,5],按照以上算法实现,执行步骤如下:

  1. 先将数组从小到大排序,得到 [0,1,3,5,6]
  2. 初始化 h 指数为 0。
  3. 从前往后扫描数组,先遍历到元素 0,引用次数小于等于当前 h 值,停止遍历。
  4. 返回 h 指数为 0。

关注作者,普修罗双战士,给你不一样的技术体验,一起在技术领域扶摇直上九万里,共筑坚如磐石的权。

欢迎 点赞✍评论⭐收藏

在这里插入图片描述

你可能感兴趣的:(算法专栏,算法,排序算法)