ええ、私は解決した宿題のような質問がありますが、テストケースでタイムアウトエラーが発生し続け、その理由がわかりません。
あなたは甥っ子の誕生日におもちゃを買う必要があります。しかし、あなたが持っているお金は限られています。ただし、甥っ子のためにできるだけ多くのユニークなおもちゃを購入したいと考えています。購入できるユニークなおもちゃの最大数を返す関数を作成します。
関数への引数は、各おもちゃのコストを含む整数配列コストと、支出できる最大金額である整数予算です。
購入できるユニークなおもちゃの最大数を表す整数を返します
制約
N がおもちゃの数で K が予算の場合... 1<=N<=105 1<=K<=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 とその他いくつか。すべて正常に実行されました