class Solution {
public:
int hIndex(vector<int>& citations) {
int n=citations.size();
int l=0,r=n;
int count=0;
while(l<r){
int mid=(l+r+1)/2;
count=0;
for(auto x:citations){
if(x>=mid)
count++;
}
if(count>=mid)
l=mid; //为了不超过 因为呢考虑道可能 23334这种好几个l是
else
r=mid-1;
}
return l;
}
};
上面是典型思路,再换一种针对排完序的数组进行二分查找,两侧都±肯定是等于嘛:
class Solution {
public:
int hIndex(vector<int>& citations) {
int n = citations.size();
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (citations[mid] >= n - mid) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return n - left;
}
};