二分法,当条件符合时扩大左边界,否则缩小右边界,输出时判断 l 是否满足条件
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param a int整型一维数组
# @param k int整型
# @return int整型
#
class Solution:
def cutWood(self , a: List[int], k: int) -> int:
def check(a, k, m):
n = 0
for ai in a:
if ai < m:
continue
else:
n += ai // m
if n >= k:
break
return n >= k
l, r = 1, max(a) + 1
s = sum(a)
while l < r:
m = l + (r - l) // 2
if check(a, k, m):
l = m + 1
else:
r = m
return l if check(a, k, l) else l - 1