H-Index II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm?
https://leetcode.com/problems/h-index-ii/description/
Thoughts
h-index计算方法和paper的引用(数组元素值)和paper数目(数组长度)有关,我们自然可以往上面套。 我们可以先试几组数,[1, 2, 3, 4, 5]此时h-index为3,[1, 2, 4, 4, 5]此时h-index还是3. 从中我们可以看出两组都可以分成前后两部分,分界点都是第三个元素,前半部分皆满足数组长度-index (即达到该引用的paper数目)>元素值,因此可以构造二分法。
Code
class Solution {
public int hIndex(int[] citations) {
int n = citations.length;
int start = 0, end = n;
while (start < end) {
int mid = start + (end - start) / 2;
if (n - mid > citations[mid]) {
start = mid + 1;
} else {
end = mid;
}
}
return n - start;
}
}
Analysis
Errors:
return n - start. 不是start
一次二分法,时间复杂度O(lgn)
Last updated
Was this helpful?