Menu
CoddyTech

Split Array Largest Sum

给你一个由非负整数组成的数组 nums 和一个整数 k。将 nums 恰好分成 k 部分,每部分都是一段非空的相邻元素,并且各部分保持原有顺序。每部分都有一个总和,划分的代价是这些总和中的最大值。

返回将数组分成 k 部分后可能达到的最小代价。

函数

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
按顺序排列的非负值
kinteger
要将它们切分成的连续部分数量
返回值integer
最大部分和的最小可能值

约束条件

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • 每个部分都至少包含一个值。所有值均为 0 的部分,其总和为 0,这是允许的。

示例

输入
nums = [6, 2, 9, 4, 7, 3]k = 3
输出
13
解释
拆分为 [6, 2]、[9, 4]、[7, 3] 的成本是 13。没有任何拆分的成本是 12:从左到右打包各部分,且每组不超过 12,会得到 [6, 2]、[9]、[4, 7]、[3],共四组。
challenge icon

进阶

使用前缀和,贪心检查可以通过二分查找找出每一部分的结束位置。当 k 较小时,整个方法的速度有多快?

重置代码
def splitArray(nums, k):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [6, 2, 9, 4, 7, 3]
k = 3

预期输出

13