电商网站建设选迅法网,快速网站seo效果,武威市住房和城乡建设局网站,南昌市网络开发公司题目链接 Leetcode.274 H 指数 mid 题目描述
给你一个整数数组 c i t a t i o n s citations citations #xff0c;其中 c i t a t i o n s [ i ] citations[i] citations[i] 表示研究者的第 i i i 篇论文被引用的次数。计算并返回该研究者的 h h h 指数。
根据维基百科…题目链接 Leetcode.274 H 指数 mid 题目描述
给你一个整数数组 c i t a t i o n s citations citations 其中 c i t a t i o n s [ i ] citations[i] citations[i] 表示研究者的第 i i i 篇论文被引用的次数。计算并返回该研究者的 h h h 指数。
根据维基百科上 h h h 指数的定义 h h h 代表“高引用次数” 一名科研人员的 h h h 指数 是指他她至少发表了 h h h 篇论文并且每篇论文 至少 被引用 h h h 次。如果 h h h 有多种可能的值 h h h 指数 是其中最大的那个。
示例 1 输入citations [3,0,6,1,5] 输出3 解释给定数组表示研究者总共有 5 篇论文每篇论文相应的被引用了 3, 0, 6, 1, 5 次。 由于研究者有 3 篇论文每篇 至少 被引用了 3 次其余两篇论文每篇被引用 不多于 3 次所以她的 h 指数是 3。 示例 2 输入citations [1,3,1] 输出1 提示 n c i t a t i o n s . l e n g t h n citations.length ncitations.length 1 ≤ n ≤ 5000 1 \leq n \leq 5000 1≤n≤5000 0 ≤ c i t a t i o n s [ i ] ≤ 1000 0 \leq citations[i] \leq 1000 0≤citations[i]≤1000
解法二分
我们定义 c h e c k ( k ) check(k) check(k)表示 c i t a t i o n s citations citations 至少存在 k k k 篇论文被引用超过 k k k 次即 c i t a t i o n s citations citations 是否满足 k k k 指数。
我们采用 二分 解决初始时 l 0 , r n l 0 , r n l0,rn
有 m i d ( l r ) / 2 mid (l r) / 2 mid(lr)/2。
如果 c h e c k ( m i d ) check(mid) check(mid) 成立即满足 m i d mid mid 指数说明 m i d mid mid 可能就是答案即 l m i d l mid lmid
否则不满足 m i d mid mid 指数说明 m i d mid mid 太大了故 r m i d − 1 r mid - 1 rmid−1
时间复杂度 O ( n × l o g n ) O(n \times logn) O(n×logn)
C代码
class Solution {
public:int hIndex(vectorint citations) {int n citations.size();int l 0 , r n;auto check [](int k) -int{int cnt 0;for(auto x:citations){if(x k) cnt;}return cnt k;};while(l r){int mid (l r 1) 1;if(check(mid)) l mid;else r mid - 1;}return l;}
};