做网站 营业执照,网站服务器多少钱,龙岗网站建设培训,表单网站怎么做seo给定一位研究者论文被引用次数的数组#xff08;被引用次数是非负整数#xff09;#xff0c;数组已经按照 升序排列 。编写一个方法#xff0c;计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”#xff08;high citations#xff09;#xff0c;一名科研… 给定一位研究者论文被引用次数的数组被引用次数是非负整数数组已经按照 升序排列 。编写一个方法计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”high citations一名科研人员的 h 指数是指他她的 N 篇论文中总共有 h 篇论文分别被引用了至少 h 次。其余的 N - h 篇论文每篇被引用次数不多于 h 次。
示例:
输入: citations [0,1,3,5,6] 输出: 3 解释: 给定数组表示研究者总共有 5 篇论文每篇论文相应的被引用了 0, 1, 3, 5, 6 次。 由于研究者有 3 篇论文每篇至少被引用了 3 次其余两篇论文每篇被引用不多于 3 次所以她的 h 指数是 3。
说明:
如果 h 有多有种可能的值 h 指数是其中最大的那个。
解题思路
因为 h 指数是指他她的 N 篇论文中总共有 h 篇论文分别被引用了至少 h 次
假设下标为i的论文数组长度为n那么该下标后面的n-i篇论文必将至少被引用了citations[i]次所以我们可以假设hn-i,那么只要citations[i]h,那么这就是一个满足题意的H指数。
因为只要i满足H指数的条件那么in同样满足H指数的条件只是H的值比i更小因此通过二分法查找边界找到刚好满足citations[i]h的下标i这就是最大的H指数了。
代码
class Solution {public int hIndex(int[] citations) {int ncitations.length,l0,rn-1;while (lr){int mid(r-l)/2l;if (citations[mid]n-mid){rmid-1;}else{lmid1;}}return n-l;}
}