关于篮球计算战斗力的一道题
以前看到过一道题。
有十个人打篮球。每个人都有对应的战斗力。如何去将这些人分成两队。并且在战斗力的差距上是最小的。
要求
输入[1,2,3,4,5,6,7,8,9,10]
输出 1
let arr =[1,2,3,4,5,6,20,60,100,110]
function dps(arr){
let la= [arr[9]]
let ra = [arr[8]]
for (let i = 7; i >=0; i-=2) {
let num= arr[i],sunNum= arr[i-1]
// 求两个数组的差
let arrsPoor = poor(la,ra)
//左队的战斗力比右队的大,并且差值少于后面两个人战斗力总和 或者 两队战斗力相当 或者左队的战斗力比右队的大并且差值大于后面两个人的总和的时候当右队只能进入一个队员
if((arrsPoor > 0 && arrsPoor<(num+sunNum)) || arrsPoor==0 ||(arrsPoor > 0&&arrsPoor> (num+sunNum)&&ra.length==4)){
la.push(sunNum)
ra.push(num)
}else if((arrsPoor<0 && Math.abs(arrsPoor)<(num+sunNum))||(arrsPoor<0 &&Math.abs(arrsPoor)>(num+sunNum)&&la.length==4) ){
la.push(num)
ra.push(sunNum)
}else if(arrsPoor >0 &&arrsPoor>(num+sunNum)&&ra.length<=3){
ra.push(num,sunNum)
}else if(arrsPoor<0 &&Math.abs(arrsPoor)>(num+sunNum)&&la.length<=3){
la.push(num,sunNum)
}
if(watch(la,ra,i-2,arr)){
break
}
}
return Math.abs( poor(la,ra))
}
function poor(arr1,arr2){
let num1= 0
arr1.map(item=>{
num1+=item
})
let num2= 0
arr2.map(item=>{
num2+=item
})
return num1-num2
}
function watch(la,ra,i,arr){
if(la.length==5 &&ra.length<5){
for (let j = i;j>=0;j--) {
ra.push(arr[j])
}
return true
}else if(ra.length==5&&la.length<5){
console.log(i);
for (let j = i;j>=0;j--) {
la.push(arr[j])
}
return true
}else{
return false
}
}
console.log(dps(arr));