// 有一堆整数,请把他们分成三份,确保每一份和尽量相等
    // (11,42,23,4,5,6 ,4 ,5, 6 ,11, 23, 42 ,56 ,78 ,90)

    1. // 有一堆整数,请把他们分成三份,确保每一份和尽量相等
    2. // (11,42,23,4,5,6 ,4 ,5, 6 ,11, 23, 42 ,56 ,78 ,90)
    3. let arr = [11, 42, 23, 4, 5, 6, 4, 5, 6, 11, 23, 42, 56, 78, 90]
    4. function toThree(arr) {
    5. arr.sort((a,b)=>a-b)
    6. const theSum = arr.reduce((pre, cur) => {
    7. pre += cur
    8. return pre
    9. }, 0)
    10. const mid = Math.ceil(theSum / 3)
    11. let [arr1, arr2, arr3] = [[], [], []]
    12. arr = toArray(mid, arr,arr1)
    13. arr = toArray(mid, arr,arr2)
    14. arr = toArray(mid, arr,arr3)
    15. console.log(arr1, arr2, arr3)
    16. console.log(arr)
    17. }
    18. function toArray(mid, arr,arr1) {
    19. let curVal = mid
    20. let arrs = arr.slice()
    21. for (let i = arrs.length - 1; i >= 0; i--) {
    22. if (curVal - arrs[i]>=0) {
    23. curVal = curVal - arrs[i]
    24. arr1.push(arrs[i])
    25. arrs.splice(i, 1)
    26. }
    27. }
    28. return arrs
    29. }
    30. toThree(arr)

    没什么好说的 分成三份 取到中间值
    然后从后往前插入插满为止