LeetCode 275. H 指数 II
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 275. H 指数 II相关的知识,希望对你有一定的参考价值。
【LetMeFly】275.H 指数 II
力扣题目链接:https://leetcode.cn/problems/h-index-ii/
给你一个整数数组 citations
,其中 citations[i]
表示研究者的第 i
篇论文被引用的次数,citations
已经按照 升序排列 。计算并返回该研究者的 h
指数。
h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (n
篇论文中)总共有 h
篇论文分别被引用了至少 h
次。且其余的 n - h
篇论文每篇被引用次数 不超过 h
次。
提示:如果 h
有多种可能的值,h
指数 是其中最大的那个。
请你设计并实现对数时间复杂度的算法解决此问题。
示例 1:
输入:
citations = [0,1,3,5,6]
输出:3 解释:给定数组表示研究者总共有5
篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6
次。 由于研究者有3
篇论文每篇 至少 被引用了3
次,其余两篇论文每篇被引用 不多于3
次,所以她的 h 指数是3
。
示例 2:
输入:citations = [1,2,100] 输出:2
提示:
n == citations.length
1 <= n <= 105
0 <= citations[i] <= 1000
citations
按 升序排列
方法一:遍历
因为原始数组已经是排好序的了,因此越往后的论文引用次数就越高。
我们只需要从前往后遍历一遍数组,当遍历到第
i
i
i个元素时,如果后面
n
−
i
n-i
n−i篇论文的引用次数都大于等于
n
−
i
n-i
n−i,就说明
n
−
i
n-i
n−i是一个h指数
。
因数组是升序的,所以后面 n − i n-i n−i篇论文的引用次数都大于等于 n − i n-i n−i 等价于 第 i i i篇论文的引用量大于等于 n − i n-i n−i
第一个合法的h指数
就是最大的h
- 时间复杂度 O ( n ) O(n) O(n),其中 n n n是数组中元素的个数
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
class Solution
public:
int hIndex(vector<int>& citations)
int n = citations.size();
for (int i = 0; i < n; i++)
if (citations[i] >= n - i)
return n - i;
return 0;
;
方法二:二分
与方法一同理,如果
n
−
i
≥
c
i
t
a
t
i
o
n
s
[
i
]
n-i\\geq citations[i]
n−i≥citations[i],那么
n
−
i
n-i
n−i就是一个合法的h
并且如果
n
−
i
n-i
n−i是h
,那么
n
−
i
−
1
n - i - 1
n−i−1、
n
−
i
−
2
n - i - 2
n−i−2、
⋯
\\cdots
⋯都是合法的h
我们要找的就是最大的合法h
显然,二分很合适。
初始时 l l l指向合法区间的第一个元素 0 0 0, r r r指向合法区间的后一个元素 n n n( n n n不合法)
当 l < r l < r l<r时,如果二者中值 m i d mid mid合法,就令 r = m i d r=mid r=mid,否则令 l = m i d + 1 l=mid+1 l=mid+1
最终 n − l n-l n−l即为答案
- 时间复杂度 O ( log n ) O(\\log n) O(logn),其中 n n n是数组中元素的个数
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
class Solution
public:
int hIndex(vector<int>& citations)
int n = citations.size();
int l = 0, r = n;
while (l < r)
int mid = (l + r) >> 1;
if (citations[mid] >= n - mid)
r = mid;
else
l = mid + 1;
return n - l;
;
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126851266
以上是关于LeetCode 275. H 指数 II的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《二分枚举》中等06 —— LeetCode 275. H 指数 II
[LeetCode] 275. H-Index II H指数 II