关于篮球计算战斗力的一道题

以前看到过一道题。
有十个人打篮球。每个人都有对应的战斗力。如何去将这些人分成两队。并且在战斗力的差距上是最小的。
要求
输入[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));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值