```
class Solution {
public:
int hIndex(vector<int>& citations) {
int n = citations.size();
if (n == 0)
return 0;
int i = 0;
int left = 0, right = n-1, mid = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (citations[mid] == (n-mid))
return n-mid;
else if (citations[mid] > (n-mid))
right = mid-1;
else
left = mid+1;
}
return n-left;
}
};
```