python - 使用 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)
解决方案
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;