// 有一堆整数,请把他们分成三份,确保每一份和尽量相等
// (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 += curreturn 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 = midlet 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)
没什么好说的 分成三份 取到中间值
然后从后往前插入插满为止
