class Solution:
def hIndex(self, citations: List[int]) -> int:
n = len(citations)
left, right = 0, n-1
while left <= right: # 常规二分法没有=,这里是为了考虑n=1的情况
mid = (right + left)//2
if citations[mid] >= n-mid:
right = mid-1 # 常规二分法是righ = mid,这里因为while的条件变了,因此最终结果是left指向的位置,而right在其左边一个
else:
left = mid+1
return n-left #这里是考虑到题目要求,left所在位置代表的h指数是后面(包括本身)有几篇文章达到h
对比一下同样使用二分法的278题,第一个错误的版本
class Solution(object):
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
left, right = 1, n
while left < right: ##二分法
mid = (right + left)//2 # 向上取整
if isBadVersion(mid):
right = mid #如果isBadVersion(mid)为True,说明第一个错误版本可能在当前mid版本或者mid前面的版本
else:
left = mid+1 #如果isBadVersion(mid)为False,说明第一个错误版本可能在当前mid版本后面不包括当前mid版本
return left