js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

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

Open Sunny-117 opened this issue 3 years ago • 3 comments

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

var a = [11, 42, 23, 4, 5, 6, 4, 5, 6, 11, 23, 42, 56, 78, 90]

function  oneToThreeArr(arr){
  let res = [{sum: 0, arr: []}, {sum: 0, arr: []}, {sum: 0, arr: []}]
  //从大到小排序,每次把最大的值给到和最小的数组中
  arr = arr.slice().sort((a,b) => b - a);//拷贝一份再排序
  arr.map(item => {
    let min = res.sort((a,b) => a.sum - b.sum)[0];//拿到当前和最小的那个数组
    min.sum += item;
    min.arr.push(item);
  })
  return res;
}
console.log(oneToThreeArr(a));

lxy-Jason avatar Nov 17 '22 08:11 lxy-Jason

let a = [11, 42, 23, 4, 5, 6, 4, 5, 6, 11, 23, 42, 56, 78, 90];
function dengfenthere(arr) {
  let result = Array.from({ length: 3 }, () => ({ sum: 0, arr: [] }));
  let arr2 = arr.sort((a, b) => b - a);
  for (let key of arr2) {
    let index = 0;
    if (result[1].sum < result[index].sum) {
      index = 1;
    }
    if (result[2].sum < result[index].sum) {
      index = 2;
    }
    result[index].sum += key;
    result[index].arr.push(key);
  }
  return result;
}

dengfenthere(a);

dizao006 avatar Oct 06 '24 10:10 dizao006

var a = [11, 42, 23, 4, 5, 6, 4, 5, 6, 11, 23, 42, 56, 78, 90];

function divideArray(nums) {
  nums.sort((a, b) => b - a);
  let piles = [[], [], []];
  let sums = [0, 0, 0];
  for(let i = 0; i < nums.length; i++) {
    let minIndex = sums.indexOf(Math.min(...sums));
    piles[minIndex].push(nums[i]);
    sums[minIndex] += nums[i];
  }
  return sums;
}

console.log(divideArray(a));

Windseek avatar Nov 14 '24 03:11 Windseek