275. H-Index II

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

复杂度

时间 O(logN) 空间 O(1)

要求时间复杂度是O(logN) , 只能用二分法了, 其实, 对于排序好的数组多用二分法和双指针.

public int hIndex(int[] citations) {
        if (citations == null || citations.length == 0) {
            return 0;
        }
        int ans = 0, n = citations.length;
        int beg = 0, end = citations.length - 1;
        while (beg + 1 < end) {
            int mid = beg + (end - beg) / 2;
            if (citations[mid] == n - mid) {
                return citations[mid];
            } else if (citations[mid] < n - mid) {
                
                beg = mid;
            } else {
                ans = Math.max(n - mid, ans);
                end = mid;
            }
        }
        if (citations[beg] >= n - beg) {
            ans = Math.max(n - beg, ans);
        }
         if (citations[end] >= n - end) {
            ans = Math.max(n - end, ans);
        }
        return ans;
        
    }

  

posted @ 2017-08-08 22:48  apanda009  阅读(124)  评论(0编辑  收藏  举报