[leetcode] 275. H-Index II 解题报告

题目链接:https://leetcode.com/problems/h-index-ii/

Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm?


思路:接上题,上题给的数组是无序的,我们可以利用基于统计的排序将时间复杂度降为O(n),而本题的数据是有序了,我们可以利用二分查找将时间复杂度降为(log n).

每次二分取中间的值,我们关注这个mid位置到最右边的距离(即大于citations[mid]的有几篇文章)和citations[mid]的关系

1.即如果(len - mid) == citations[mid],则这个距离就是我们能够得到的最大h-index

2.如果(len - mid) < citations[mid],则说明我要找的位置在中点的左边,即我们有更多引用次数超过(len - mid)的文章

3.如果(len - mid) > citations[mid],说明我们要找的位置应该在中点的右边,即我们没有那么多引用次数超过(len - mid)的文章

代码如下:

class Solution {
public:
    int hIndex(vector<int>& citations) {
        int left = 0, len = citations.size(), right = len-1;
        while(left <= right)
        {
            int mid = (left + right)/2;
            if(len-mid == citations[mid])
                return citations[mid];
            if(len-mid < citations[mid])
                right = mid-1;
            else
                left = mid+1;
        }
        return len-left;
    }
};









你可能感兴趣的:(LeetCode,search,Facebook,binary)