LeetCode 275. H-Index II(二分查找)

275. H-Index II

Medium

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?

题意

LeetCode 274. H-Index的姊妹题。给定一个长度为N的升序数组,求h-index

思路

二分查找,在有序数组中查找元素值大于等于n-元素下标的第一个元素

代码

class Solution {
     
    public int hIndex(int[] citations) {
     
        int n = citations.length, l = 0, r = n - 1, mid = 0;
        if (n == 0 || citations[n-1] == 0) {
     
            return 0;
        }
        while (l < r) {
     
            mid = (l + r) / 2;
            if (citations[mid] >= n - mid) {
     
                r = mid;
            } else {
     
                l = mid + 1;
            }
        }
        return n - l;
    }
}

你可能感兴趣的:(LeetCode,LeetCode,Medium,Java,二分查找)