class Solution:
def minimizeArrayValue(self, nums: List[int]) -> int:
def isValid(maxVal):
prefix_sum = 0
for i in range(len(nums)):
prefix_sum += nums[i]
if prefix_sum > maxVal * (i + 1):
return False
return True
left, right = 0, max(nums)
while left < right:
mid = left + (right - left) // 2
if isValid(mid):
right = mid
else:
left = mid + 1
return leftWhere is the size of the array and is the maximum value in the array.
class Solution:
def minimizeArrayValue(self, nums: List[int]) -> int:
res = total = nums[0]
for i in range(1, len(nums)):
total += nums[i]
res = max(res, math.ceil(total / (i + 1)))
return res