没想到好办法,只会这个笨办法
function getMax(ary,temp){
var temp=temp||0;
if(ary.length<2){
return temp;
}
if(ary.length==2){
temp+=ary[0]*ary[1]
return temp;
}
var tempAry=[];
for(var i=0;i
for(var j=i+1;j
var newAry=ary.filter(function(item,index){
return index!=i&&index!=j;
});
newAry.push(ary[i]+ary[j]);
tempAry.push(getMax(newAry,temp+ary[i]*ary[j]))
}
}
return Math.max.apply(null,tempAry);
}
console.log(getMax([7,58,9,10,27,28]))
这题是个陷阱啊,考的是数学知识,不管选取的顺序是什么,最终的结果是不变的
公式是:
( (n[1]+n[2]+n[3]+..+n[m])(n[1]+n[2]+n[3]+..+n[m])-(n[1]n[1]+n[2]n[2]+...n[m]n[m]) )/2
防止计算过程中整数溢出:
function getValue(ary){
var addValue=0;
var resultValue=0;
for(var i=0;i
addValue+=ary[i];
}
for(var i=0;i
resultValue+=addValue*ary[i];
resultValue-=ary[i]*ary[i];
}
return resultValue/2;
}