在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 請問如何將list中元素劃分為兩部分,使得這兩部分和相同(如果存在這樣的劃分)?

請問如何將list中元素劃分為兩部分,使得這兩部分和相同(如果存在這樣的劃分)?

假設(shè)list中有n個元素,如何將該list劃分為兩部分list1,list2,使之sum(list1) == sum(list2),如果存在這樣的劃分的話,否則return -1.(這里的劃分是挑選的意思)

回答
編輯回答
愛是癌

總感覺好像哪里還有問題,但是試了好多組數(shù)據(jù),結(jié)果又都是正確的,

function sumArray(arr){
  var length = arr.length
  var sum = 0
  for(var i = 0;i<length;i++){
    sum += arr[i] 
  }
  
  return sum
}

function blanceArray(left,right){
  console.log('==========================')
  console.log(left,right)
  var leftsum = sumArray(left)
  var rightsum = sumArray(right)
  console.table(leftsum,rightsum)
  if(leftsum>rightsum){
    return false
  }
  if(leftsum === rightsum){
    return [left,right]
  } else {
    var findnum = (rightsum-leftsum)/2
    for(var i = 0;i<=right.length;i++){
      if(right[i]===findnum){
        left.push(...right.splice(i,1))
        return [left,right]
      }
    }
    left.push(right.pop())
    return blanceArray(left,right)
  }
  
}

function main(arr){
  var sum = sumArray(arr)
  console.log(sum)
  if(sum % 2 !== 0){
    return false
  }
  
  arr.sort(function(a,b){
    return a<b
  })
  
  
  
  var left = [arr.shift()]
  //console.log(arr)
  return blanceArray(left,arr)
  
}

//var testarr = [2,5,6,7,8,4]
var testarr = [3,2,4,3]
var testarr = [1,3,3,6,7,8,16,2]

var result = main(testarr)

console.log(result)

http://jsbin.com/yipuxajala/1...

2017年9月3日 11:46
編輯回答
空痕

背包問題,先加一遍獲得sum(all), 然后背包限值為sum(all)/2, 使用動態(tài)規(guī)劃算法或者搜索算法即可解決。

2018年7月2日 11:30