LeetCode 274 H指数[排序 计数] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 274 H指数[排序 计数] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
排序+计数,解决这道问题就这么简单,排序让引用从小到大排序,然后倒着计数,一直到计数大于等于遍历到的位置,返回该计数即可,代码如下:
class Solution {
public:
int hIndex(vector<int>& citations) {
sort(citations.begin(), citations.end());
int len = citations.size(), num = 0;
for(int i = len - 1; i >= 0; i --) {
if(num >= citations[i]) {
break;
}
num ++;
}
return num;
}
};
本来还想尝试二分的方法,毕竟排序后的数组采用二分法查找更快些,但是如何判断临界值是个问题,需要注意,代码如下:
class Solution {
public:
int hIndex(vector<int>& cit) {
int n=cit.size();
int l = 0, r = n;
while(l < r){
int mid = (l+r+1)/2; //+1是为了避免当n=1时,程序陷入死循环
int t = 0;
for(auto x:cit){
if(x >= mid) t ++;
}
if(t < mid) r = mid - 1; //此时答案不满足,收缩右边界
else l = mid; //此时满足,扩大左边界
}
return l;
}
};
以上是关于LeetCode 274 H指数[排序 计数] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章