Re: [闲聊] 每日LeetCode

楼主: pandix (面包屌)   2023-04-06 07:29:13
※ 引述《Rushia (みけねこ的鼻屎)》之铭言:
: 2439. Minimize Maximum of Array
: 给你一个阵列 nums ,你可以做无限次数的下列一串操作(必须同时做):
: 1. i 必须满足 1 <= i < n 且 nums[i] > 0
: 2.把 nums[i - 1] 递增
: 3.把 nums[i] 递减
: 试求经过多次操作后,阵列里的最大值是多少? 这个最大值要尽可能小。
提供一个O(n)的做法:
假设已经知道nums[0~i-1]部分能达成的最小最大值 premax
nums[0~i-1] 都已经小于等于 premax
1.如果 premax >= nums[i]: premax 维持不变,因为 i-1 之前多出来的不能往右移
2.如果 premax < nums[i]: 尝试把 nums[i] 多出来的部分分摊给全部人
其实可以直接看 nums[0~i] 的平均值是多少就好
如果这平均值 >= premax: 那新的 max 就会是这个平均值
如果这平均值 < premax: 前面的 nums[0~i-1] 已经告诉你他最小就是 premax 了
这种状况 premax 就只能维持不变,可以参考 [10,1,1,1,11] 的结果
Python code:
class Solution:
def minimizeArrayValue(self, nums: List[int]) -> int:
premax = presum = 0
for i, num in enumerate(nums):
if premax < num:
premax = max(premax, ceil((presum+num) / (i+1)))
presum += num
return premax
作者: black80731 (坏坏)   2023-04-06 07:30:00
要把 nums[i] 多出来的部分塞进马来菊花要怎么 写 我英文很烂 谢谢
楼主: pandix (面包屌)   2023-04-06 07:37:00
马来菊花.append(nums[i])
作者: NTHUlagka (拉卡)   2023-04-06 08:33:00
好强

Links booklink

Contact Us: admin [ a t ] ucptt.com