274. H 指数

我的解法:
直接暴力,hash存值

class Solution {
public:
    int hIndex(vector<int>& citations) {
        int maxH = 0;
        vector<int> h(1010, 0);
        for (int i = 0; i < citations.size(); ++i) {
            int times = citations[i];
            for (int j = 0; j < 1010; ++j) {
                if (j <= times) ++h[j];
            }
        }
        for (int i = 1009; i >= 0; --i) {
            if (h[i] != 0) cout << h[i] << " ";
            if (h[i] >= i) maxH = max(maxH, i);
        }
        return maxH;
    }
};

其他解法:排序
很绕,设定h初始为0,当citations[i] > h时,表示此时找到一篇文章的引用次数至少为h+1i即这一篇文章,而citations[i] > h表示这篇文章的引用次数大于h,即h+1
由于是从引用次数最多的文章开始遍历,于是每找到一篇这样的文章,h指数对应+1,于是h++,直到找不到这样的文章,h即为最终结果。

class Solution {
public:
    int hIndex(vector<int>& citations) {
        int h = 0;
        sort(citations.begin(), citations.end());
        for (int i = citations.size() - 1; i >= 0; --i) {
            if (citations[i] > h) {
                ++h;
            }
        }
        return h;
    }
};

你可能感兴趣的:(LeetCode,算法,数据结构,哈希算法)