求一个好看的网站,做网站的名字大全,老河口城乡建设局网站,跑腿网站开发力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试#xff1f;力扣提供海量技术面试资源#xff0c;帮助你高效提升编程技能#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/description/?envTyped…力扣LeetCode官网 - 全球极客挚爱的技术成长平台备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/description/?envTypedaily-questionenvId2023-10-29
给你一个整数数组 citations 其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 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]输出1h指数
例如h指数为3则说明
1至少发表了3篇论文——符合条件2的元素个数≥3
2每篇论文至少被引用3次——元素大小≥3 自己的思路
输入数组 citations先将其排序根据h指数的定义进行判断。
例如示例1
citations [3,0,6,1,5]排序后
citations [0,1,3,5,6]
1≥0的元素有5个记为0,5
2≥1的元素有4个记为1,4
3≥2的元素有3个记为2,3
4≥3的元素有3个记为3,3
其实到这里就可以中止了因为keyvalue不符合h指数的定义
5≥4的元素有2个记为4,2
6≥5的元素有2个记为5,2
7≥6的元素有1个记为6,1 所以解题的重点是如何计算value这里我使用了一层循环寻找比key大的元素个数。 代码
class Solution {public int find(int[] citations, int target) {int len citations.length;for (int i 0; i len; i) {if (citations[i] target) {return len - i;}}return 0;}public int hIndex(int[] citations) {Arrays.sort(citations);HashMapInteger, Integer hashMap new HashMap();int len citations.length;for (int i 0; i len 1; i) {int tmp find(citations, i);if (i tmp hashMap.size() 1)break;hashMap.put(i, tmp);}System.out.println(hashMap);Object[] obj hashMap.keySet().toArray();Arrays.sort(obj);return (int) obj[obj.length - 1];}
} 结果感觉不是很好 力扣官方题解
力扣LeetCode官网 - 全球极客挚爱的技术成长平台备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/h-index/solutions/869042/h-zhi-shu-by-leetcode-solution-fnhl/?envTypedaily-questionenvId2023-10-29只需要知道存在即可例如排序后的示例1
citations [0,1,3,5,6]
假设h为0从后往前比较
首先是60即为存在一篇论文并且这一篇论文被引用次数0则可以将h设为1
然后是51即为存在两篇论文并且这两篇论文被引用次数1则可以将h设为2为什么是两篇因为h还没有到达2所以现在不可能出现引用次数2的论文
然后是32即为存在三篇论文并且这三篇论文被引用次数2则可以将h设为3
最后是13因为要取最大的所以结束比较 代码
class Solution {public int hIndex(int[] citations) {Arrays.sort(citations);int h 0, i citations.length - 1; while (i 0 citations[i] h) {h; i--;}return h;}
}