📅  最后修改于: 2023-12-03 15:41:33.514000             🧑  作者: Mango
给定长度为n的正整数数组nums和正整数k。
请找到要求的最小整数数m,以便将数组分成k个“连续”段,每个段都包含至少一个整数。
返回一个整数m,以满足问题描述。
根据题目上所给出的分段个数k,我们可以知道,至少每一个连续段至少包含整数的数量为(float)n/k的向上取整。
将数组nums的所有元素求和,即得到所有整数的总和total。 则最小整数数m应该满足的条件应该是:
为了找到这个i,我们可以使用二分查找的方法来逐步缩小范围,直到找到我们想要的i。
def min_integer(nums, k):
def count(mid, nums):
cnt = 0
s = 0
for num in nums:
s += num
if s >= mid:
cnt += 1
s = 0
return cnt
l, r = 1, sum(nums)
while l < r:
mid = (l + r) // 2
cnt = count(mid, nums)
if cnt >= k:
l = mid + 1
else:
r = mid
return l - 1
assert min_integer([1,2,3,4,5,6,7,8,9,10], 5) == 7
assert min_integer([2,2,2,2], 2) == 4