博文中会简要介绍Leetcode P0275题目分析及解题思路。
“H-Index II”是一道中等难度的题目,同时也是p0274的衍生题。这道题其实就是p0274排完序之后利用二分搜索寻找临界点的过程。具体思路不再赘述。
Given an array of integers
citationswherecitations[i]is the number of citations a researcher received for theirithpaper and citations is sorted in an ascending order, return compute the researcher’sh-index.According to the definition of
h-indexon Wikipedia: A scientist has an indexhifhof theirnpapers have at leasthcitations each, and the othern − hpapers have no more thanhcitations each.If there are several possible values for
h, the maximum one is taken as theh-index. You must write an algorithm that runs in logarithmic time.
以下是Java的题解代码实现。
class Solution {
    public int hIndex(int[] citations) {
        int N = citations.length, mid = 0, left = 0, right = N-1;
        while (left < right) {
            mid = left+(right-left)/2;
            
            if (N-mid == citations[mid]) {
                return N-mid;
            }
            else if (N-mid > citations[mid]) {
                left = mid+1;
            }
            else {
                right = mid-1;
            }
            
        }
        
        mid = left+(right-left)/2;
        if (N-mid > citations[mid]) {
            return N-mid-1;
        }
        else {
            return N-mid;
        }
    }
}
以下是C++的题解代码实现。
class Solution {
public:
    int hIndex(vector<int>& citations) {
        int N = citations.size();
        int left = 0, right = N-1, mid = left+(right-left)/2;
        while (left < right) {
            if (N-mid == citations[mid]) {
                return N-mid;
            }
            else if (N-mid > citations[mid]) {
                left = mid+1;
            }
            else {
                right = mid-1;
            }
            
            mid = left+(right-left)/2;
        }
        
        if (N-mid > citations[mid]) {
            return N-mid-1;
        }
        else {
            return N-mid;
        }
    }
};