class Solution {
public int hIndex(int[] citations) {
Function<Integer, Boolean> check = mid -> {
int cnt = 0;
for (int i = 0; i < citations.length; i ++ ) {
if (citations[i] >= mid) {
cnt ++ ;
}
}
return cnt >= mid;
};
int l = 0, r = citations.length;
while (l < r) {
int mid = l + r + 1 >> 1;
if (check.apply(mid)) l = mid;
else r = mid - 1;
}
return l;
}
}