HackerRank挑战的玩具任务数量上限?

时间:2018-10-05 12:44:22

标签: javascript algorithm

我正在尝试解决此问题: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;
}

5 个答案:

答案 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;
}