根据上一题优化而来,既然是查找一个临界状态,又要求时间复杂度O(logN),用二分查找。
临界条件:找到一个 citation[i] == len - i
的点;
如果 citation[i] > len - i
,说明还可以往左试探;
如果 citation[i] < len - i
,说明还可以往右试探;
class Solution {
public:
int hIndex(vector<int>& citations) {
int n = citations.size();
int left = 0, right = citations.size()-1;
while(left <= right)
{
int mid = left + (right - left) / 2;
if(citations[mid] >= n - mid)
{
right = mid - 1;
}
else
left = mid + 1;
}
return n - left;
}
};