410. 分割数组的最大值(二分贪心)

不断二分尝试分段的最大值为mx时能不能划分为k段

class Solution:
    def splitArray(self, nums: List[int], k: int) -> int:
        def check(mx: int) -> bool:
            cnt = 1
            s = 0
            for x in nums:
                if s + x <= mx:
                    s += x
                else:
                    if cnt==k or x>mx:
                        return False
                    cnt += 1
                    s = x
            return cnt<=k
        right = sum(nums)
        left = max(max(nums) - 1, (right-1) // k)
        while left < right:
            mid = (left + right) // 2
            if check(mid):
                right = mid
            else:
                left = mid+1
        return left

划分dp的做法( dp[i][j]即nums[:i+1]划分为j段的最小最大值)

class Solution:
    def splitArray(self, nums: List[int], k: int) -> int:
        pre = [0] * (len(nums)+1) # 前缀和
        dp = [[float('inf')] * k for _ in range(len(nums))]
        for i in range(len(nums)):
            pre[i+1] = pre[i] + nums[i]
            dp[i][0] = pre[i+1]
        for i in range(len(nums)):
            for j in range(1,k):
                for t in range(j-1,i):
                    dp[i][j] = min(dp[i][j],max(dp[t][j-1], pre[i+1]-pre[t+1]))
        return int(dp[-1][-1])
### 如何使用 Git 命令行提交代码 为了通过命令行向仓库提交更改,需遵循一系列特定的操作流程。这些操作不仅限于添加文件到暂存区、执行实际的提交动作以及撰写有意义的日志信息。 #### 准备工作 在准备阶段,先要确保本地修改已经完成并测试无误。此时可以查看当前状态来确认哪些文件被改动过: ```bash git status ``` 这一步骤有助于了解即将提交的内容概览[^2]。 #### 添加变更至暂存区 一旦确定好想要提交的具体变动之后,则可通过`git add`指令将它们加入到待提交列表之中。如果打算一次性全部纳入考虑范围内的最新版本的话,那么可以直接采用`.`通配符简化过程: ```bash git add . ``` 此命令会把所有未跟踪的新建文件连同已存在但发生改变过的项目一并收入囊中等待下一步处理。 #### 执行提交操作 当一切就绪后就可以正式实施提交行为啦!这时要用到的就是大名鼎鼎的`git commit`啦~记得附上清晰明了的信息描述以便日后追溯查询哦! 按照惯例,在编写日志的时候应该采祈使句的形式表达意图——即告诉别人“做某事”。例如,“修复 bug”,而不是“我修复了一个错误”。 ```bash git commit -m "fix typo in README.md" ``` 上述例子中的 `-m` 参数后面紧跟的是本次更新的核心要点说明;而双引号内则是具体阐述所作更动目的的文字叙述部分[^4]。 #### 查看历史记录 最后还可以利用 `git log` 来回顾过往所有的提交情况,包括作者姓名、日期时间戳记及备注详情等等有用资料呢! ```bash git log ``` 以上就是完整的基于命令行工具实现源码管理的基本步骤介绍啦[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值