🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。
🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。
🎉欢迎 👍点赞✍评论⭐收藏
🔎 算法领域知识 🔎
链接 | 专栏 |
---|---|
分发糖果 | 算法专栏 |
买卖股票的最佳时机 | 算法专栏 |
跳跃游戏 | 算法专栏 |
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]
,按照以上算法实现,执行步骤如下:
- 先将数组从小到大排序,得到
[0,1,3,5,6]
。 - 初始化 h 指数为 0。
- 从前往后扫描数组,先遍历到元素 0,引用次数小于等于当前 h 值,停止遍历。
- 返回 h 指数为 0。
🏆关注作者,普修罗双战士,给你不一样的技术体验,一起在技术领域扶摇直上九万里,共筑坚如磐石的权。
🎉欢迎 👍点赞✍评论⭐收藏