难度:中等

思路:
代码:
class Solution:
def minCapability(self, nums: List[int], k: int) -> int:
l, r = min(nums), max(nums)
while l < r:
mid = (l + r) >> 1
n = 0
vis = 0
for i in nums:
if i <= mid and vis == 0:
n += 1
vis = 1
else:
vis = 0
if n < k:
l = mid + 1
else:
r = mid
return l
python有自带的二分查找函数bisect_left(list, x, key=None)
其中第一个参数是待插入值的列表
第二个参数是待插入的值
第三个参数表示更复杂的比较方式
个人对key参数的理解,相当于把二分查找过程中的 mid 值传入 key 函数中,将最后的返回值再与待插入值 x 进行比较
class Solution:
def minCapability(self, nums: List[int], k: int) -> int:
def f(y : int) -> int:
count, visited = 0, False
for x in nums:
if x <= y and not visited:
count, visited = count + 1, True
else:
visited = False
return count
return bisect_left(range(min(nums), max(nums)), k, key = f) + min(nums)