【LeetCode】275. H-Index II 二叉树的所有路径(Medium)(JAVA)
题目地址: https://leetcode.com/problems/h-index-ii/
题目描述:
Given an array of citations sorted in ascending order (each citation is a non-negative integer) of a researcher, write a function to compute the researcher’s h-index.
According to the definition of h-index on Wikipedia: “A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each.”
Example:
Input: citations = [0,1,3,5,6]
Output: 3
Explanation: [0,1,3,5,6] means the researcher has 5 papers in total and each of them had
received 0, 1, 3, 5, 6 citations respectively.
Since the researcher has 3 papers with at least 3 citations each and the remaining
two with no more than 3 citations each, her h-index is 3.
Note:
If there are several possible values for h, the maximum one is taken as the h-index.
Follow up:
- This is a follow up problem to H-Index, where citations is now guaranteed to be sorted in ascending order.
- Could you solve it in logarithmic time complexity?
题目大意
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照 升序排列 。编写一个方法,计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)"
说明:
如果 h 有多有种可能的值 ,h 指数是其中最大的那个。
进阶:
- 这是 H 指数 的延伸题目,本题中的 citations 数组是保证有序的。
- 你可以优化你的算法到对数时间复杂度吗?
解题方法
- 因为 citations 已经排好序了,也知道了判断是否是 h 的条件 citations[citations.length - h] >= h
- 采用二分法判断最大的 h 即可(主要是把 == 的情况放在了 start 这边就行)
class Solution {
public int hIndex(int[] citations) {
if (citations.length <= 0 || citations[citations.length - 1] == 0) return 0;
int start = 1;
int end = citations.length;
while (start <= end) {
int mid = start + (end - start) / 2;
if (citations[citations.length - mid] >= mid) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return end;
}
}
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:45.2 MB,击败了86.16% 的Java用户
![](https://i-blog.csdnimg.cn/blog_migrate/6c56d31f951aece27c5faae608dfac2e.jpeg#pic_center)