let arr = [300, 600, 300, 500, 1000, 700, 300];
function task(arr) {
let left = [];
let right = [];
let lefts = 0;
let rights = 0;
let flag = true; // 第一次累加最大值 第二次累加最小值 平分两组任务
// 平分两组任务
let newArr = arr.sort((a, b) = >b - a);
if (flag) {
left.push(newArr[0]);
right.push(newArr[1]);
newArr = newArr.slice(2);
} else {
left.push(newArr[newArr.length - 1]);
right.push(newArr[newArr.length - 2]);
newArr = newArr.slice(0, newArr.length - 2);
}
// 开关循环 第一次加最大值 第二次加最小值 依次累加
flag = !flag;
// 两组任务分别之和
lefts = left.reduce((a, b) = >a + b);
rights = right.reduce((a, b) = >a + b);
// 只剩下一个任务或0个任务时,最终结果计算
if (newArr.length <= 1) {
if (newArr.length == 1) {
if ((lefts - rights) > newArr[0]) {
return lefts;
} else {
right.push(newArr[0]);
rights = right.reduce((a, b) = >a + b);
return rights;
}
} else {
if (lefts < rights) {
return rights;
} else {
return lefts;
}
}
}
// 递归调用实现循环
return task(newArr);
};
alert("最短时间为:" + task(arr) + 's');
来源: https://www.cnblogs.com/lewiscutey/p/8313325.html