[LeetCode] H-Index

简介: If you've read the Wikipedia article of H-Index, there is already a neat formula there for computing the h-index, which is written below using the notations of the problem.

If you've read the Wikipedia article of H-Index, there is already a neat formula there for computing the h-index, which is written below using the notations of the problem. Note that in the formula below, citations is sorted in descending order and i is 1-indexed.

h = max_i(min(i, citations[i]))

Now you will easily write down the following code.

 1 class Solution {
 2 public:
 3     int hIndex(vector<int>& citations) {
 4         sort(citations.rbegin(), citations.rend());
 5         int h = 0, i = 0;
 6         for (int c : citations)
 7             h = max(h, min(++i, c));
 8         return h;
 9     }
10 };

This code takes 20ms. In fact, rbegin and rend seems to be relatively slow. An alternative is to sort citations in normal ascending order and then count all those papers with citations larger than their indexes, as what Stefan does here. Now the code runs in 12ms.

 1 class Solution {
 2 public:
 3     int hIndex(vector<int>& citations) {
 4         sort(citations.begin(), citations.end()); 
 5         int h = 0, i = citations.size();
 6         for (int c : citations)
 7             h += (c > --i);
 8         return h;
 9     }
10 };

Well, both the above codes are in O(nlogn) time. Is there a linear time solution? The answer is yes: refer to this post if you like :-)

 1 class Solution {
 2 public:
 3     int hIndex(vector<int>& citations) {
 4         int n = citations.size(), h = 0;
 5         int* counts = new int[n + 1]();
 6         for (int c : citations)
 7             counts[min(c, n)]++;
 8         for (int i = n; i; i--) {
 9             h += counts[i];
10             if (h >= i) return i;
11         } 
12         return h;
13     }
14 };

This code uses both linear time and space, and runs in 8ms. Wow, we've moved a long way from the original 20ms version :-)

目录
相关文章
LeetCode 275. H-Index II
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的 h 指数。
132 0
LeetCode 275. H-Index II
LeetCode 274. H-Index
给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。
144 0
LeetCode 274. H-Index
LeetCode 274 H-Index (H索引)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/51753099 翻译 给定一个研究者的引用数(每个引用都是非负数)的数组,写一个函数用于计算研究者的h索引。
926 0
[LeetCode] H-Index II
This problem is designed specifically to use binary search. In fact, in H-Index, someone has already used this idea (you may refer to this post :-)) The code is as follows.
748 0
[LeetCode] H-Index
Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher’s h-index. According to the definition of h-index on Wikip
1147 0
[LeetCode] H-Index II
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize your algorithm? Hint: Expected runtime complexity is in O(log n) and the input is sort
1040 0
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
146 1
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等