Javascript 找到成本更低的最佳组合
我有这样一个数组:Javascript 找到成本更低的最佳组合,javascript,php,laravel,Javascript,Php,Laravel,我有这样一个数组: fee=[1 => 10,2=>18,4=>32,8=>60] 我希望得到如下结果: 7 -> 4+2+1 => 32+18+10 7=>60 9 -> 8+1 => 60+10 9=>70 这里7、9是输入值 它如何解决这个问题 这一个有点棘手,但它可以工作并且可以扩展: var arr = [10, 18, 32, 60]; var search = 7; var result = 0; for (va
fee=[1 => 10,2=>18,4=>32,8=>60]
我希望得到如下结果:
7 -> 4+2+1 => 32+18+10
7=>60
9 -> 8+1 => 60+10
9=>70
这里7、9是输入值
它如何解决这个问题 这一个有点棘手,但它可以工作并且可以扩展:
var arr = [10, 18, 32, 60];
var search = 7;
var result = 0;
for (var i = 0; i < (search >>> 0).toString(2).length; i++) {
if ((search >>> 0).toString(2)[i] == "1") {
result += arr[i];
}
}
// result = 60
var-arr=[10,18,32,60];
var搜索=7;
var结果=0;
for(var i=0;i<(search>>0).toString(2.length;i++){
if((搜索>>>0).toString(2)[i]=“1”){
结果+=arr[i];
}
}
//结果=60
说明:
(search>>0).toString(2)
将seached值(7)转换为二进制掩码<代码>7=>111和9=>1001
。然后它循环遍历这个二进制字符串的每个字符,检查它是0还是1,并将数组中的等价项添加到结果中。您可以遍历费用组,并获得可能的整数值。保存该值并继续,直到选中所有组
迭代的数组必须先按最低成本排序,然后按较高成本排序,然后按较大的包排序
功能获取最低成本(价值、费用){
var结果={cost:0};
result.rest=Object.keys(fee).sort(函数a,b){
退货费[a]/a-费用[b]/b | | b-a;
}).减少(功能(r,a){
结果[a]=数学地板(r/a);
结果成本+=结果[a]*费用[a];
返回r%a;
},价值);
返回结果;
}
log(getLowestCost(7,1:10,2:18,4:32,8:60});
log(getLowestCost(9,{1:10,2:18,4:32,8:60});
log(getLowestCost(7,{1:10,2:20,4:32,8:60});
log(getLowestCost(9,{1:10,2:20,4:32,8:60})代码>
。作为控制台包装{max height:100%!important;top:0;}
显示**付款**1,2,4,8是小时,10,18,32,60是货币($),我不是专家,但这看起来像域。这真的不是一个简单的任务。对我来说,它似乎是纯二进制操作,索引是2fee的幂,数组不是ObjectReal吗?我看到一个对象。@Mahi,fee
是一个PHP关联数组,它相当于一个javascript对象。@NinaScholz,非常棒的算法,虽然它可能会失败,代价像{1:10,2:20,4:32,8:60}
@sevavietl,但它现在应该可以优先使用更大的包。