Sorting is a natural solution. But, you don't have to run O(nlgn) sorting for all the time. Counting sort is O(n)!

class Solution {
public:
    int hIndex(vector<int>& cit) 
    {
        int len = cit.size();
        vector<long> hist(cit.size()+1,0);
        for(int i=0;i<len;++i)
            hist[min<int>(len,cit[i])]++;
    
        long cumSum=0;
        for(int i=len;i>=0;--i) 
        {
            cumSum+=hist[i];
            if(cumSum>=i)
                return i;
        }        
        return 0;
    }
};