Leetcode 275 - 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."

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?

思路:

此题采用二分查找解决。

  • 首先定位中间的位置。如果中间位置元素的值大于它之后元素的数。则在左半区中查找答案。
  • 如果小于之后的元素数则在右半区查找答案。因为最后需要找到最大的元素。
  • 在左半区查找的同时还需要记录大于指定元素的元素个数,记为result,即为最终的结果。

代码:

public int hIndex(int[] citations) {
        if(citations == null || citations.length == 0)
            return 0;
        int result = 0;
        int length = citations.length;
        int left = 0;
        int right = citations.length - 1;
        while(left <= right){
            int mid = left + (right - left)/2;
            if(citations[mid] >= length - mid){
                result = length - mid;
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return result;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,424评论 0 10
  • “众里寻他千百度,蓦然回首,那人却在灯火阑珊处。” 辛弃疾的《青玉案》是顾则诏最喜欢的词。他还依稀记得初中语文...
    今时明月_阅读 797评论 0 4
  • 文/夏晚歌 她摘下一片青叶 红唇绿叶热吻着 清幽的音像个贪玩的孩子跑开去 草里的鸣虫不请自来地伴奏 风路过夜里的木...
    夏晚歌阅读 219评论 0 3
  • 我爱你 最美妙的花总是在昨日绽放 最无力的慌总是对着自己在讲
    不思中州晚阅读 146评论 0 1