// 有一堆整数,请把他们分成三份,确保每一份和尽量相等
// (11,42,23,4,5,6 ,4 ,5, 6 ,11, 23, 42 ,56 ,78 ,90)
// 有一堆整数,请把他们分成三份,确保每一份和尽量相等
// (11,42,23,4,5,6 ,4 ,5, 6 ,11, 23, 42 ,56 ,78 ,90)
let arr = [11, 42, 23, 4, 5, 6, 4, 5, 6, 11, 23, 42, 56, 78, 90]
function toThree(arr) {
arr.sort((a,b)=>a-b)
const theSum = arr.reduce((pre, cur) => {
pre += cur
return pre
}, 0)
const mid = Math.ceil(theSum / 3)
let [arr1, arr2, arr3] = [[], [], []]
arr = toArray(mid, arr,arr1)
arr = toArray(mid, arr,arr2)
arr = toArray(mid, arr,arr3)
console.log(arr1, arr2, arr3)
console.log(arr)
}
function toArray(mid, arr,arr1) {
let curVal = mid
let arrs = arr.slice()
for (let i = arrs.length - 1; i >= 0; i--) {
if (curVal - arrs[i]>=0) {
curVal = curVal - arrs[i]
arr1.push(arrs[i])
arrs.splice(i, 1)
}
}
return arrs
}
toThree(arr)
没什么好说的 分成三份 取到中间值
然后从后往前插入插满为止