我正在尝试解决此问题:http://www.hackerrank.com/challenges/mark-and-toys
马克和简生完第一个孩子后非常高兴。他们的儿子 喜欢玩具,所以马克想买一些玩具。有很多不同 摆在他面前的玩具,上面标有价格。马克只有一个 花费一定的金额,他想最大化玩具的数量 他用这笔钱买了。
给出价格和花费金额的清单,最大金额是多少 马克可以买多少玩具?例如,如果和马克必须花钱, 他可以用或货币单位购买商品。他会选择 第一组物品。
我的解决方案正常工作,但是当向其抛出大量数字时,显然是不正确的。
// Complete the maximumToys function below.
function maximumToys(prices, k) {
const pricesSorted = prices.sort();
// console.log('pricesSorted ', pricesSorted);
let budget = k;
let noToys = 0;
pricesSorted.forEach(toyPrice=>{
if (toyPrice <= budget) {
noToys++;
budget = budget - toyPrice;
}
});
// console.log('noToys ', noToys);
return noToys;
}
答案 0 :(得分:0)
如果没有将类似的函数传递给sort()
,它将假定这些值是字符串,并根据Unicode代码点对它们进行排序。来源:-Sort
因此,传递一个可比较的函数,JS会根据此函数的返回值对对象进行排序。您其余的代码是正确的。
const pricesSorted = prices.sort(function(a,b){return a-b;});
更新:
由于sort()
就地排序,因此pricesSorted
是多余的。
答案 1 :(得分:0)
根据价格对玩具进行排序,只要还有钱,就继续拿玩具。
// Complete the maximumToys function below.
function maximumToys(prices, k) {
var bought = 0
var pricings = prices.sort((a, b) => a - b)
var amtLeft = k;
for (var i = 0; i < pricings.length; i++){
if (amtLeft < pricings[i]) {
break;
} else {
amtLeft = amtLeft - pricings[i];
bought++;
}
}
return bought
}
答案 2 :(得分:0)
function maximumToys(prices, k) {
let cost=0,count=0;
var x = prices.sort((a,b)=>a-b);
for(let i=0; i<prices.length; i++)
{
if(cost<k)
{
cost+=x[i];
count++;
}
}
return count-1;
}
答案 3 :(得分:0)
我的JavaScript解决方案
function maximumToys(prices, b) {
var t = 0;
var i = 0;
var arr = prices.sort((a,b) => a-b);
for (let j=0; j < arr.length; j++) {
t += arr[j];
if (t < b) {i++}
else {break;};
}
return i;
}
console.log(maximumToys([1, 12, 5, 111, 200, 1000, 10], 50));
答案 4 :(得分:-2)
#include <bits/stdc++.h>
using namespace std;
vector<string> split_string(string);
// Complete the maximumToys function below.
int maximumToys(vector<int> prices, int k) {
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string nk_temp;
getline(cin, nk_temp);
vector<string> nk = split_string(nk_temp);
int n = stoi(nk[0]);
int k = stoi(nk[1]);
string prices_temp_temp;
getline(cin, prices_temp_temp);
vector<string> prices_temp = split_string(prices_temp_temp);
vector<int> prices(n);
for (int i = 0; i < n; i++) {
int prices_item = stoi(prices_temp[i]);
prices[i] = prices_item;
}
int result = maximumToys(prices, k);
fout << result << "\n";
fout.close();
return 0;
}
vector<string> split_string(string input_string) {
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
return x == y and x == ' ';
});
input_string.erase(new_end, input_string.end());
while (input_string[input_string.length() - 1] == ' ') {
input_string.pop_back();
}
vector<string> splits;
char delimiter = ' ';
size_t i = 0;
size_t pos = input_string.find(delimiter);
while (pos != string::npos) {
splits.push_back(input_string.substr(i, pos - i));
i = pos + 1;
pos = input_string.find(delimiter, i);
}
splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));
return splits;
}