淮南服装网站建设地址,301 wordpress,网页设计与制作有什么用,四川住房城乡建设部网站1. 题目
给定一位研究者论文被引用次数的数组#xff08;被引用次数是非负整数#xff09;。编写一个方法#xff0c;计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”#xff08;high citations#xff09;#xff0c;一名科研人员的 h 指数是指他…1. 题目
给定一位研究者论文被引用次数的数组被引用次数是非负整数。编写一个方法计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”high citations一名科研人员的 h 指数是指他她的 N 篇论文中至多有 h 篇论文分别被引用了至少 h 次。其余的 N - h 篇论文每篇被引用次数不多于 h 次。”
示例:
输入: citations [3,0,6,1,5]
输出: 3
解释: 给定数组表示研究者总共有 5 篇论文每篇论文相应的被引用了 3, 0, 6, 1, 5 次。由于研究者有 3 篇论文每篇至少被引用了 3 次其余两篇论文每篇被引用不多于 3 次所以她的 h 指数是 3。说明: 如果 h 有多种可能的值h 指数是其中最大的那个。来源力扣LeetCode 链接https://leetcode-cn.com/problems/h-index 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 解题
参考的官方解法 先排序然后找到最后一个可形成正方形的点
class Solution {
public:int hIndex(vectorint citations) {sort(citations.begin(), citations.end(), [](int a, int b){return a b;});int i 0;while(i citations.size() citations[i] i)// y i1i;return i;}
};二分法
class Solution {
public:int hIndex(vectorint citations) {sort(citations.begin(), citations.end(), [](int a, int b){return a b;});//找最后一个citations[i] i1int l 0, r citations.size()-1, mid;while(l r){mid l ((r-l)1);if(citations[mid] mid1)r mid-1;else{if(mid citations.size()-1 || citations[mid1] mid2)return mid1;l mid1;}}return l;}
};计数法
class Solution {
public:int hIndex(vectorint citations) {int n citations.size(), i;int paper[n1] {0};for(i 0; i n; i)paper[min(citations[i], n)];//引用次数超过n的不影响结果//引用次数是下标有多少篇(值)int count n;//引用n次的int papers paper[n];//文章总数paperswhile(count papers){count--;papers paper[count];}return count;}
};