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之路的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 274.H指数

[LeetCode] 274. H-Index H指数

(Java) LeetCode 274. H-Index —— H指数

LeetCode 274. H指数

LeetCode Algorithm 274. H 指数

[M排序] lc274. H 指数(排序+模拟)