首页 > 解决方案 > 使用 Python 的 HackerRank “已完成订单”问题

问题描述

最近HackerRank推出了自己的认证。他们提供的测试包括“问题解决”。该测试包含2个问题;他们给你 90 分钟的时间来解决它们。像我一样缺乏经验,我失败了,因为我花了比这更长的时间。

具体来说,我在 30 分钟内想出了第一个问题(已完成的订单,见下文)的解决方案,然后用剩下的时间尝试调试它。它的问题不在于解决方案不起作用,而在于它仅适用于某些测试用例

在 14 个测试用例中,该解决方案适用于 7 个(包括所有打开的测试用例和一堆封闭的测试用例),而在其余 7个测试用例(全部关闭)上无效。关闭意味着输入数据不可用,以及预期的输出。(这是有道理的,因为其中的一些列表包含 250K+ 元素。)

但这让我发疯;我无法弄清楚它可能有什么问题。我尝试将打印语句放在所有地方,但我唯一想到的是1 太多元素被添加到列表中- 因此,最后一条if语句(删除最后添加的元素),但它没有任何区别,所以这可能是错误的。

这是问题所在:

一家小部件制造商正面临对其新产品的意外高需求。他们希望满足尽可能多的客户。给定一些可用的小部件和客户订单列表,制造商最多可以完成多少订单?

功能说明

在下面的编辑器中完成函数filledOrders。该函数必须返回一个整数,表示已完成订单的最大可能数量。

fillOrders 具有以下参数:

    order : 列出订单的整数数组

    k : 一个整数,表示可发货的小部件

约束

1≤n≤2×105

1 ≤ 订单[i] ≤ 109

1≤k≤109

自定义测试的样本输入

2

10

30

40

样本输出

2

这是我的功能:

def filledOrders(order, k):
    total = k
    fulf = []
    for r in order:
        if r <= total:
            fulf.append(r)
            total -= r
        else:
            break

    if sum(fulf) > k:
        fulf.pop()
        
    return len(fulf)

标签: python

解决方案


Java 解决方案

int count = 0;
        Collections.sort(order);
        for(int i=0; i<order.size(); i++) {
            if(order.get(i)<=k) {
                count++;
                k = k - order.get(i);
            } 
        }
        return count;

推荐阅读