Java 在Codibility样本测试中仅占77%
我尝试了Codibility演示测试,但由于性能测试,从未获得超过77%的测试结果 测试主要说明: 给定一个由N个整数组成的数组A,返回在A中不出现的大于0的最小正整数 我的解决方案有什么问题 性能测试失败:超时错误 运行时间:0.152秒,时限:0.100秒Java 在Codibility样本测试中仅占77%,java,performance,Java,Performance,我尝试了Codibility演示测试,但由于性能测试,从未获得超过77%的测试结果 测试主要说明: 给定一个由N个整数组成的数组A,返回在A中不出现的大于0的最小正整数 我的解决方案有什么问题 性能测试失败:超时错误 运行时间:0.152秒,时限:0.100秒 import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; class Solution3 { int sol
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution3 {
int solution(int[] A) {
ArrayList<Integer> list = Arrays.stream(A).boxed().distinct().sorted()
.filter(i -> i > 0)
.collect(Collectors.toCollection(ArrayList::new));
Integer prev_item = 0;
for (int i = 0; i < list.size(); i++) {
Integer item = list.get(i);
if (!(item - 1 == prev_item)) {
return prev_item + 1;
}
prev_item = item;
}
return prev_item + 1;
}
public static void main(String[] args) {
Solution3 solution3 = new Solution3();
int[] A = new int[6];
A[0] = 1;
A[1] = 2;
A[2] = 3;
A[3] = 8;
A[4] = 8;
A[5] = 11;
int solution = solution3.solution(A);
System.out.println("solution: " + solution);
}
}
我认为主要的问题是如何将数组转换为ArrayList,并将其从负值中清除
如果您只使用Arrays.sortA对数组进行排序,然后对其进行二进制搜索以查找第一个正值,然后从中执行其余操作,则性能会更好。堆栈溢出不适用于此类开放式问题。你可以试试数组。binarySearch不提供第一个正数,所以你必须自己实现,但整个任务需要在30分钟内完成。我不会说在几分钟内实现二进制搜索特别困难。您只需跟踪时间间隔,并按如下方式继续划分:int min=0,max=A.length-1;whilemin!=max{int middle=min+max/2;ifA[middle]<0 min=middle+1;else max=middle;}然后min将是第一个非零元素的索引。花了我大约5分钟。