H指数
H指数是用来综合衡量学者发表论文的数量和质量的指标,
若某学者共发表N篇论文,H指数是指存在h 篇论文至少每篇有h 引用量,剩下的N-h篇中,每篇都不超过h引用量
计算H指数的方法:
1、排序法
思路:
先将数组排序,我们就可以知道对于某个应用数,有多少文献的引用数大于这个数。对于引用数citations[i],大于该引用数
文献的数量是citations.length - i , 而当前的H-Index则是Math.min(citations[i],citations.length - i ),我们将这个
当前的H指数和全局最大的H指数来比较,得到最大的H指数。
程序设计:
public class Solution {
public int hIndex(int[] citations){
//排序
Arrays.sort(citations);
int h = 0 ;
for (int i = 0; i < citations.length; i++){
//得到当前的H指数
int currH = Math.min(citations[i],citations.length - i);
if (currH > h){
h = currH;
}
}
return h;
}
}
2、二分查找法:
思路:
在升序的引用数 数组中,假设数组长为N,下标为i ,则N - i 就是引用次数大于等于下标为i的文献所对应的引用次数的文章数。如果该位置的引用数小于文章数,
则说明则是有效的H指数,如果一个数是H指数,那最大的H指数一定在他的后面(因为是升序的)。根据这点就可以进行二分搜索了。这里min = mid + 1的条件
是citations[mid] < n - mid,确保退出循环时min肯定是指向一个有效哦的H指数。
程序设计:
public class Solution {
public int hIndex(int[] citations) {
int n = citations.length;
if(n == 0) return 0;
int min = 0, max = citations.length - 1;
while(min <= max){
int mid = (min + max) / 2;
// 如果该点是有效的H指数,则最大H指数一定在右边
if(citations[mid] < n - mid){
min = mid + 1;
// 否则最大H指数在左边
} else {
max = mid - 1;
}
}
// n - min是min点的H指数
return n - min;
}
}
H指数的更多相关文章
- [LeetCode] H-Index 求H指数
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- [Swift]LeetCode274.H指数 | H-Index
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- [Swift]LeetCode275. H指数 II | H-Index II
Given an array of citations sorted in ascending order (each citation is a non-negative integer) of a ...
- Leetcode 274.H指数
H指数 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义: "一位有 h 指数的学者,代表他(她)的 N 篇论文中至多有 ...
- 275 H-Index II H指数 II
这是 H指数 进阶问题:如果citations 是升序的会怎样?你可以优化你的算法吗? 详见:https://leetcode.com/problems/h-index-ii/description/ ...
- 274 H-Index H指数
给定一位研究者的论文被引用次数的数组(被引用次数是非负整数).写一个方法计算出研究者的H指数.H-index定义: “一位科学家有指数 h 是指他(她)的 N 篇论文中至多有 h 篇论文,分别被引用了 ...
- Leetcode之二分法专题-275. H指数 II(H-Index II)
Leetcode之二分法专题-275. H指数 II(H-Index II) 给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列.编写一个方法,计算出研究者的 h 指数. ...
- [LeetCode] 274. H-Index H指数
Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...
- [LeetCode] 275. H-Index II H指数 II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize ...
随机推荐
- LOJ-10100(割点个数)
题目链接:传送门 思路: 就是求割点的个数,直接Tarjan算法就行. 注意输入格式(判断比较水). #include<iostream> #include<cstdio> # ...
- C++探究foreach算法
for_each在algorithm.h 中 template<class _InIt, class _Fn1> inline _Fn1 for_each(_InIt _First, _I ...
- left join on 和where中条件的放置位置
转自:http://blog.csdn.net/muxiaoshan/article/details/7617533 select * from td left join (select case_ ...
- qhfl-7 结算中心
结算中心,即从购物车前往支付前的确认页面,这里要开始选择优惠券了 """ 前端传过来数据 course_list 课程列表 redis 中将要存放的结算数据 { sett ...
- Jetbrain Pycharm Theme
https://github.com/ChrisRM/material-theme-jetbrains
- pyinstaller打包程序 带图片
首选说一下,这种打包方式只能在本电脑上使用运行正常 准备:.py文件:你的程序 gif文件:你要用的图片 第一步: 在上面文件所在目录打开cmd 输入 pyi-makespec FP.py 会生成一个 ...
- 五、MongoDB的索引
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 四.MongoDB的查询 五.MongoDB的索引 1.简介 它就像是一本书的目录,如果没 ...
- Dynamic Programming | Set 1 (Overlapping Subproblems Property)
动态规划是这样一种算法范式:将复杂问题划分为子问题来求解,并且将子问题的结果保存下来以避免重复计算.如果一个问题拥有以下两种性质,则建议使用动态规划来求解. 1 重叠子问题(Overlapping S ...
- 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程
之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了. UWP什么的很久没有正儿八经写了,国内的需求 ...
- [Swift]LaunchScreen.storyboard设置启动页
设置[General]->[App Icons and Launch Images] 注意:当App不是用LaunchScreen.xib来配置启动页时,[LaunchScreen File]置 ...