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