题目链接
法一(二分查找)
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) {
if (mid == 0) {
return len;
}
int before = mid - 1;
if (citations[before] < len - before) {
return len - mid;
}
right = mid - 1;
} else {
left = mid + 1;
}
}
return 0;
}
本地测试
lay.showTitle(275);
Solution275 sol275 = new Solution275();
int[] citations275 = new int[]{3, 0, 6, 1, 5};
System.out.println(Arrays.toString(citations275));
System.out.println(sol275.hIndex(citations275));