所以,是的,我有一个问题,我已经解决但仍然在测试用例中给出超时错误,我无法弄清楚原因。
你需要为他的生日买你的侄子玩具。但你只有有限的资金。但是,你想为你的侄子购买尽可能多的独特玩具。编写一个函数,返回您可以购买的最大数量的独特玩具。
函数的参数是整数数组成本,其中包含每个玩具的成本和整数预算,这是您可以花费的最大金额。
返回表示您可以购买的独特玩具的最大数量的整数
约束
如果N是玩具数量而K是预算...... 1·; = N< = 105 1·; = K&LT = 109 1< =任何玩具的价格< = 109
示例输入
费用:{1,12,5,111,200,1000,10} 预算:50 样本返回值
4 解释
他最多只能买4件玩具。这些玩具有以下价格:1,12,5,10。
所以这就是我写的内容,它不断给出10个测试用例的超时错误。我无法弄明白为什么
function maxPurchasedToys(costs, budget) {
var costsLess=[];
var removeFromArray=function(arr, value){
for(i in arr){
if(arr[i]==value){
arr.splice(i,1);
break;
}
}
return costsLess;
}
//First let's get a new array consisting only of costs that are equal to or below the budget
costs.map(function(x){x<budget?costsLess.push(x):1;})
var sum=0;
costsLess.map(function(x){sum+=x;});//Get the sum of budget
while(sum>=budget){
var max=Math.max.apply( Math, costsLess );
costsLess=removeFromArray(costsLess,max);//Remove the biggest element to ensure that the costs fall within budget
sum=0;
costsLess.map(function(x){sum+=x;});//Get the new sum of budget
}
return costsLess.length;
}
我尝试了以下案例:原始测试案例,[5000,2000,20,200],50和其他几个案例。全部执行得很好
答案 0 :(得分:1)
为什么不简单地排序和迭代?
function maxPurchasedToys (costs, budget) {
var i = 0, sum = 0, count = 0,
l = costs.length;
costs.sort(function (a, b) { return a - b });
while ( i < l ) {
if ( budget >= sum + costs[i] ) {
sum = sum + costs[i];
count++;
i++;
} else {
break;
}
}
return count;
}
这是小提琴:http://jsfiddle.net/Ya5MK/
如果你能够使用ES5数组方法(你正在使用map
,我想你可以),使用它:
function maxPurchasedToys (costs, budget) {
var sum = 0, count = 0;
costs.sort(function (a, b) { return a - b }).some(function (cost) {
if ( budget >= sum + cost ) {
sum = sum + cost;
count++;
} else {
return true;
}
});
return count;
}
答案 1 :(得分:0)
您可以尝试使用另一种接近排序您的费用数组升序,并查看您可以在该数组上获取的距离
http://www.w3schools.com/jsref/jsref_sort.asp
function maxPurchasedToys (costs, budget) {
costs.sort(function(a,b){return a-b});
count = 0;
money = budget;
for (i=0; i<costs.length(); i++){
if (money > costs[i]){
money -= costs[i];
count ++;
}
else{
break;
}
}
return count;
}