[LeetCode]59. H-Index H指数
2015-11-06 15:31
295 查看
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 Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."
For example, given
Note: If there are several possible values for
Show Hint
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
解法1:对输入数组按引用次数从高到低排序,然后扫描一遍数组,找到第一篇“被引用次数小于它在数组中出现的序号”的论文,其序号即是H-Index。
解法2:设计Map<int,int>,保存下某个引用次数和论文篇数的映射。扫描一遍数组,若当前论文引用次数为x,则将[0,x]间所有的引用次数的论文篇数加1。然后再扫描一遍Map,找出论文篇数超过这个引用次数的引用次数,即是H-Index。
According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."
For example, given
citations = [3, 0, 6, 1, 5], which means the researcher has
5papers in total and each of them had received
3, 0, 6, 1, 5citations respectively. Since the researcher has
3papers with at least
3citations each and the remaining two with no more than
3citations each, his h-index is
3.
Note: If there are several possible values for
h, the maximum one is taken as the h-index.
Show Hint
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
解法1:对输入数组按引用次数从高到低排序,然后扫描一遍数组,找到第一篇“被引用次数小于它在数组中出现的序号”的论文,其序号即是H-Index。
class Solution { public: int hIndex(vector<int>& citations) { int n = citations.size(); sort(citations.begin(), citations.end(), greater<int>()); for(int i = 0; i < n; ++i) { if(citations[i] <= i) return i; } return n; } };
解法2:设计Map<int,int>,保存下某个引用次数和论文篇数的映射。扫描一遍数组,若当前论文引用次数为x,则将[0,x]间所有的引用次数的论文篇数加1。然后再扫描一遍Map,找出论文篇数超过这个引用次数的引用次数,即是H-Index。
class Solution { public: int hIndex(vector<int>& citations) { int n = citations.size(); map<int, int> index; for (int i = 0; i < n; ++i) { int idx = citations[i]; for (int j = 0; j <= idx; ++j) ++index[j]; } int hIndex = 0; for (map<int, int>::iterator iter = index.begin(); iter != index.end(); ++iter) { if (iter->second >= iter->first) hIndex = max(hIndex, iter->first); } return hIndex; } };
相关文章推荐
- Hibernate主键生成策略
- javascript 回调函数(闭包)
- 看到一篇文章刷CSDN博客访问量,目前没有环境实现,抽空可以去跑跑看或者改为其他方式实现
- 关于FPGA软核的一些总结(microblaze && NIOS II)
- java获取服务器CPU,内存,硬盘使用量
- docker安装入门
- libevent代码阅读(5)——“hello-world.c”之 event_base对象的创建
- 1096. Consecutive Factors
- 怎么调试驱动代码
- 无法嵌入互操作类型
- Passing cookie to webview
- 查询测试
- 关于用 random 生成伪随机数的一个手笔
- MapReduce超时原因(Time out after 300 secs)
- 09.Curator临时节点
- 黑马程序员------IO流体系图
- Android5.0下运行失败
- Spark编程指南笔记
- 堆栈和变量的存储
- mysql update中需要根据条件列更新写法update case