class Solution {// I1
public:
int hIndex(vector<int>& citations) {
sort(citations.begin(),citations.end());
int ret = 0;
for (int i = 0 ; i < citations.size(); ++i){
int tmp = min (citations[i], (int)citations.size() - i);
if (ret <= tmp)
ret = tmp;
else
break;
}
return ret;
}
};
class Solution { // I2
public:
int hIndex(vector<int>& citations) {
vector<int> count(citations.size() + 1, 0);
for (int i = 0; i < citations.size(); ++i){
if ( citations[i] < citations.size())
count[citations[i]] ++; // 统计数字出现的次数
else
count[citations.size()]++;
}
int ret = 0,
cnt = 0;
for (int i = 0; i < count.size(); ++i){
if (count[i]){
int tmp = min (i, (int)citations.size() - cnt);
if (ret <= tmp){
ret = tmp;
cnt += count[i];
}
else
break;
}
}
return ret;
}
};
class Solution { // II
public:
int hIndex(vector<int>& citations) {
if (citations.empty())
return 0;
int low = 0,
high = citations.size() - 1,
ret = 0;
while (low <= high){
int mid = (low + high) / 2;
if (citations[mid] >= citations.size() - mid)
high = mid - 1;
else
low = mid + 1;
}
return min ((int)citations.size() - low, citations[low]);
}
};