Java 在Codibility样本测试中仅占77%

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

我尝试了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 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分钟。