LeetCode 275. H-Index II
原题链接在这里:https://leetcode.com/problems/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."
Example:
Input:citations = [0,1,3,5,6]Output: 3 Explanation:[0,1,3,5,6]means the researcher has5papers in total and each of them had received 0, 1, 3, 5, 6citations respectively. Since the researcher has3papers with at least3citations each and the remaining two with no more than3citations each, her h-index is3.
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
citationsis now guaranteed to be sorted in ascending order. - Could you solve it in logarithmic time complexity?
题解:
Have l = 0, r = n - 1, continue binary search with l <= r, if (nums[mid] == n - mid), we find the target.
Otherwise, when nums[mid] < n - mid, that means we guess smaller, l = mid+ 1. Else, r = mid - 1.
After gettting out of binary search and there is no result, return n - l.
Note: here it is n - l, not n - 1.
Time Complexity: O(logn).
Space: O(1).
AC Java:
1 public class Solution { 2 public int hIndex(int[] citations) { 3 if(citations == null || citations.length == 0){ 4 return 0; 5 } 6 int len = citations.length; 7 int r = len-1; 8 int l = 0; 9 while(l<=r){ 10 int mid = l+(r-l)/2; 11 if(citations[mid] == len-mid){ 12 return len-mid; 13 }else if(citations[mid] < len-mid){ 14 l = mid+1; 15 }else{ 16 r = mid-1; 17 } 18 } 19 return len-l; 20 } 21 }
类似H-Index.
浙公网安备 33010602011771号