H指数II
题目描述:
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照升序排列。编写一个方法,计算出研究者的h指数。
h指数的定位:h代表“高引用次数”(high citations),一位科研人员的h指数是指他(她)的(N篇论文中)总共有h篇论文分别被引用了至少h次。且其余的N-h篇论文每篇被引用次数不超过h次。
示例:
输入:citations = [0, 1, 3, 5, 6]
输出:3
说明:
给定数组表示研究者共有5篇论文,每篇论文分别被引用了0,1,3,5,6次。由于该研究者有3篇论文每篇至少被引用了3次,其余两篇论文被引用不多于3次,则他的h指数就为3。
思路:
逆序排序+遍历、二分查找
代码:
class Solution:
def hIndex(self, citations: List[int]) -> int:
# 二分查找
n = len(citations)
left = 0
right = n - 1
while left <= right:
mid = left + (right - left) // 2
if citations[mid] >= n - mid:
right = mid - 1
else:
left = mid + 1
return n - left
# 逆序排序,遍历查找
# citations.sort(reverse=True)
# temp = 0
# for i in range(len(citations)):
# if i+1==citations[i]:
# return i+1
# elif i+1<citations[i]:
# temp = i+1
# else:
# break
# return temp