【发布时间】:2015-12-15 20:30:23
【问题描述】:
问题:没有重排的整数分区
输入:非负数 {s1, . . . , sn} 和一个整数 k。
输出:最大的工作是将 S 划分为 k 个或更少的范围,以最小化所有范围的最大总和,而不重新排序任何数字。
示例输入 = [100, 200, 300, 400, 500, 600, 700, 800, 900] 应该输出最大的作业,它只有 1,700,因为该数组最好是分区 100 200 300 400 500 | 600 700 | 800 900。
我的功能不工作。例如,当它应该输出 1,700 时,它输出 2,400。不知道怎么回事。
我的代码
var integerPartitionRec = function(n, k, S) {
function sum(p, c) {
return p + c;
}
if (i === 1) return S[1];
if (k === 1) return S.slice(0, n).reduce(sum);
var cost, min_cost = Number.MAX_VALUE;
for (var i = 1; i < n; i++) {
cost = Math.max(integerPartitionRec(i, k - 1, S), S.slice(i).reduce(sum));
min_cost = Math.min(min_cost, cost);
}
return min_cost;
};
var run = function() {
var test = [100, 200, 300, 400, 500, 600, 700, 800, 900];
console.log(integerPartitionRec(test.length, 3, test));
};
run();
【问题讨论】:
-
这里有问题还是你只是分享你的代码?
-
代码不起作用。对于示例输入,它应该返回 1,700 但返回 2,400
-
什么是
iif (i === 1) return S[1]; ? -
@RiaD 我觉得应该是
n
标签: javascript algorithm recursion