我开始通过googlekickstart测试我的技能,然后选择一个过去的问题来看看它是如何工作的,然后我就陷入了困境。我的程序对这个示例运行得很好,但它给出了测试集1的运行时错误。我不明白它如何适用于样本,也不适用于测试集。我看不出我犯了什么错误。
问题链接:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f56
问题:
问题
有n栋房子待售。买第i栋房子花了ai美元。你的预算是b美元。
你最多能买多少套房子?
输入
输入的第一行给出了测试用例的数量t。t测试用例紧随其后。每个测试用例从一行开始,其中包含两个整数n和b。第二行包含n个整数。第i个整数是ai,第i个房子的成本。
输出
对于每个测试用例,输出一行包含case#x:y,其中x是测试用例编号(从1开始),y是您可以购买的最大房屋数量。
限制
时间限制:每个测试集15秒。内存限制:1gb。1≤ t型≤ 1001≤ b≤ 1051≤ 人工智能≤ 1000,对我来说。
测试集1≤ n≤ 100
测试集2 1≤ n≤ 105
样品
输入
3 4 100 20 90 40 90 4 50 30 30 10 10 3 300 999 999 999
输出
案例#1:2案例#2:3案例#3:0
在示例案例1中,您的预算为100美元。你可以花20+40=60美元买第一套和第三套房子。
在示例案例2中,您的预算为50美元。你可以花30+10+10=50美元买第一、第三和第四套房子。
在示例案例3中,您的预算为300美元。你不能买任何房子(所以答案是0)。
我的代码:
import java.util.*;
public class Solution {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
int N,T,B = 0,A;
Scanner input = new Scanner(System.in);
int casex = 1;
T = input.nextInt();
for (int i = 0; i < T; i++) {
N = input.nextInt();
list.add(N);
B = input.nextInt();
list.add(B);
for (; N > 0; N--) {
A = input.nextInt();
list.add(A);
}
}
for(int i = 0; i < list.size();) {
int j = list.get(i);
int jtemp = j;
int k = list.get(i+1);
ArrayList<Integer> house = new ArrayList<>();
for (; j > 0; j--) {
house.add(list.get(i+j+1));
}
int count = 0;
do {
int min = Collections.min(house);
if (k - min >= 0) {
count += 1;
k -= min;
house.remove(new Integer(min));
}
else {
break;
}
} while (B > 0);
System.out.println("Case #" + casex + ": " + count);
casex += 1;
i += jtemp + 2;
}
}
}
以下是我的示例运行:
样品运行
暂无答案!
目前还没有任何答案,快来回答吧!