亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個分攤算法的問題?

一個分攤算法的問題?

設置一個數組,輸入n個大小不同數,然后把這些數分成m份,怎么才能讓所有份之間的數目差之和最小?例如[1,2,5,6,9,2,546,312,26,23],然后分成兩份,怎么讓這兩份每份加起來,然后做差能最小?(每份的個數不用相等)
查看完整描述

4 回答

?
什么鬼_呀你

TA貢獻46條經驗 獲得超35個贊

var?arr=[1,9,10,13,20],	
????arr2=[],	
????b=true,compare=0,
????str=[],
????x=0;//次數
????arr.sort(function(a,b){	//先排序
????????return?a-b;	});
???arr2.push(arr.pop());//先推入最大的一個,
???console.log(arr);
???console.log(arr2);
???while(b&&arr.length>=1){???
????	?let?num1=arr.reduce(function(){?
????	??????????	return?arguments[0]+arguments[1];
????	?????????}),??
????	???num2=arr2.reduce(function(){?
????	?????	return??arguments[0]+arguments[1];?
????	?????	})?
???let?num=num1-num2;?
???console.log("第"+(x++)+"次num1--"+num1,"num2--"+num2);
???compare=num;
???if(num1<num2){?
???	console.log("s組合1--"+str[0]+'組合2--'+str[1]);
???	b=false;
???	?}else{?
???	?str=[];//清空???
???	?arr2.push(arr.shift());
???	?str.push(arr,arr2);
???	?}
??}

emm,就它了,,,

查看完整回答
1 反對 回復 2018-07-20
  • RoughColorText
    RoughColorText
    這樣運算輸出的結果是30-23=7; 如果組合1--[10,13,1] 組合2--[20,9]就是29-24=5這樣更小啊
  • 什么鬼_呀你
    什么鬼_呀你
    21行if循環中加入 let min = str[1][1]; str[0].unshift(min); str[1].splice(1,1) 最后,試了多次,發現倒數第二次才是正確的分配,然后str[1]推出最小到str[0]就好了,emm,但是很無奈,不知道怎么取到倒數第二次的匹配。。。 現在搞得我也很期待到底怎么寫才好
  • RoughColorText
    RoughColorText
    加了那句之后這里的結果好像是對了,但是如果改一下原輸入的數組,例如改成[1,9,2,2,10,13,20]那么輸出的應該是[1,2,2,10,13]和[20,9]也就是29-28=1,但是出來的結果卻是s組合1--1,10,13組合2--20,2,2,9
點擊展開后面1
?
杏仁酥餅

TA貢獻1條經驗 獲得超0個贊

https://img1.sycdn.imooc.com//5b51597500016c6105150615.jpg

不知道是不是這個意思、、、

查看完整回答
反對 回復 2018-07-20
  • 4 回答
  • 1 關注
  • 1677 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號