275. H-Index II
Difficulty: Medium
Follow 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.
思路
第275题H-Index中,先对数组进行降序排序,再逐一判断citations[i]是否大于i;这道题给出的数组本就是升序排序的,那判断条件就变为citations[i]是否大于size-1-i。此外,应题要求,使用二分查找降低时间复杂度。
代码
[C++]
class Solution {
public:
int hIndex(vector<int>& citations) {
if (citations.size() < 1)
return 0;
int size = citations.size();
int start = 0;
int end = size - 1;
int h = 0;
while (start <= end) {
int mid = (start + end) / 2;
if (citations[mid] > size - 1 - mid) {
h = size - mid;
end = mid - 1;
}
else
start = mid + 1;
}
return h;
}
};