我的程序应该传递 2 个数组列表、到达时间和持续时间,并且应该返回基本上可以在不重叠的情况下发生的事件数量。然而,很多测试用例没有成功通过。下面显示了预期的输出:
arrivals = [1,3,3,5,7]
duration = [2,2,1,2,1]
第一个人于 1 点到达,停留 2 小时,然后离开。 2 人 3 点到达,但只允许 1 人出席 2 或 1 小时。下一个人在 5 点到达,展示 2 小时。最后一人于 7 点到达,并展示 1 小时。答案输出应该是 4,因为 4 个人能够呈现。以下是我当前的计划:
class Result {
public static int maxEvents(List<Integer> arrival,List<Integer> duration) {
int counter = 0;
if (arrival.size() == 0) {
counter = 0;
} else {
for (int i = 0; i < arrival.size() - 1; i++) {
if (arrival.get(i) + duration.get(i) <= arrival.get(i + 1)) {
counter++;
} else if (arrival.get(i).equals(arrival.get(i + 1))) {
counter++;
i++;
} else if (arrival.get(arrival.size()-1).equals(arrival.get(i))) {
counter++;
}
}
}
return counter;
}
}
该程序适用于以下测试用例:
arrival = [1,1,1,1,4]
duration = [10,3,4,6,2]
Output: 2
但在以下情况下会失败:
arrival = [1,3,5]
duration = [2,2,2]
Expected:3
Mine:2
或者:
arrival = [1]
duration = [5]
Expected = 1
Mine = 0
我似乎无法看出问题所在。
有用户在评论中提交了自己对该问题的逻辑,下面是植入:
class Result {
public static int maxEvents(List<Integer> arrival,List<Integer> duration) {
int counter = 0;
if (arrival.size() == 0) {
return 0;
} else {
counter = 1;
ArrayList <Integer> timeseq = new ArrayList<Integer>();
for (int i = 0;i< arrival.size(); i++) {
timeseq.add(arrival.get(i));
timeseq.add(arrival.get(i)+duration.get(i));
}
for (int j =1; j<= timeseq.size()-2; j+=2) {
if(timeseq.get(j) <= timeseq.get(j+1)) {
counter++;
}
}
return counter;
}
}
}
此代码未通过测试用例
arrival = (1,1,1,1,4) duration = (10,3,6,4.2)
Expected = 2
Mine = 1
最佳答案
也许您混淆了 .size() 和 .length()。这些是不同的方法,它们有不同的返回。考虑@Nexevis 的回答,也许删除“-1”,因为您正在调用数组的大小。
关于java - 一些测试用例满足,而另一些则不满足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57980205/