This problem is designed specifically to use binary search. In fact, in H-Index, someone has already used this idea (you may refer to this post :-))
The code is as follows.
1 class Solution { 2 public: 3 int hIndex(vector<int>& citations) { 4 int n = citations.size(), l = 0, r = n - 1; 5 while (l <= r) { 6 int m = l + (r - l) / 2; 7 if (citations[m] >= n - m) r = m - 1; 8 else l = m + 1; 9 } 10 return n - r - 1; 11 } 12 };