[LeetCode]274 H指数
2016-03-06 14:28
369 查看
H-Index(H指数)
【难度:Medium】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 citations = [3, 0, 6, 1, 5], which means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively. Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, his h-index is 3.
Note: If there are several possible values for h, the maximum one is taken as the h-index.
给定记录了一位学者论文被引用次数的一个数组,求该名学者的H指数。
H指数是指一名科学家在已发表的N篇论文中,有h篇被引用次数不少于h次的论文,剩余的N-h篇论文被引用次数不超过h次。
解题思路
理解h指数的含义,先对数组升序排序后,找到临界值即为H指数。关键点在与判断当前论文被引用的次数是否不小于剩下的论文数量,由于升序排列,如果不小于说明之后的论文被引用次数都满足条件,H指数就找到了。
c++代码如下:
class Solution { public: int hIndex(vector<int>& citations) { if (citations.empty()) return 0; int len = citations.size(); quicksort(citations,0,len-1); for (int i = 0; i < len; i++) { if (citations[i] >= (len-i)) { return len-i; } } return 0; } void quicksort(vector<int>& t, int low, int high) { if (low >= high) return; int key = t[low]; int i = low; int j = high; while (i < j) { while (i < j && t[j] >= key) j--; t[i] = t[j]; while (i < j && t[i] <= key) i++; t[j] = t[i]; } t[i] = key; quicksort(t,low,j-1); quicksort(t,j+1,high); } };
相关文章推荐
- Java文件读写操作
- NTP多种模式的配置
- poj3187Backward Digit Sums(dfs)
- linux shell的运行(有意思)
- Equals和==的区别
- 2015简单总结
- 程序员必知必会之blog篇
- 生命周期总结
- 1 JPA 批注参考
- UVA270sscanf的使用
- dedecms下修改class文件支持文章列表按权重排序
- 初学Python-搞了一个linux用户登录监测小工具
- JVM调优总结
- Metasploit 学习记录
- 理解spring
- java学习笔记(3)基本概念之抽象类和接口
- [LeetCode]131. Palindrome Partitioning
- java学习笔记(2)基本概念之面向对象大纲
- JavaScript中利用jQuery绑定事件的几种方式小结
- java学习笔记(1)基本概念之成员