题目:
Follow up for H-Index: What if the citations
array is sorted in ascending order? Could you optimize your algorithm?
题解:
二分法。
c++版:
class Solution {
public:
int hIndex(vector<int>& citations) {
int l = citations.size();
int start = 0, end = l - 1;
while(start <= end) {
int mid = (start + end) * 0.5;
if(citations[mid] == l - mid)
return l - mid;
else if(citations[mid] > l - mid)
end = mid - 1;
else
start = mid + 1;
}
return l - start;
}
};
Java版:
public class Solution {
public int hIndex(int[] citations) {
int l = citations.length;
int start = 0, end = l - 1;
while(start <= end) {
int mid = (start + end) / 2;
if(citations[mid] == l - mid)
return l - mid;
else if(citations[mid] > l - mid)
end = mid - 1;
else
start = mid + 1;
}
return l - start;
}
}
Python版:
class Solution(object):
def hIndex(self, citations):
"""
:type citations: List[int]
:rtype: int
"""
N = len(citations)
if N == 0:
return 0
if citations[N-1] == 0:
return 0
low, high = 0, N - 1
while low <= high:
mid = (low + high) / 2
if N - mid > citations[mid]:
low = mid + 1
else:
high = mid - 1
return N - low