ollow up for H-Index: What if the
citations array is sorted in ascending order? Could you optimize your algorithm?
Hint:
- Expected runtime complexity is in O(log n) and the input is sorted.
Since the problem asks for a O(log n) solution, we can think of using a binary search.
Code (Java):
public class Solution {
public int hIndex(int[] citations) {
if (citations == null || citations.length == 0) {
return 0;
}
int lo = 0;
int hi = citations.length - 1;
int len = citations.length;
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
if (citations[mid] == len - mid) {
return len - mid;
} else if (citations[mid] < len - mid) {
lo = mid;
} else {
hi = mid;
}
}
if (citations[lo] >= len - lo) {
return len - lo;
}
if (citations[hi] >= len - hi) {
return len - hi;
}
return 0;
}
}
No comments:
Post a Comment