java - 我如何优化此代码以减少评估时间

标签 java algorithm

我正在解决一个问题,该问题要求我打印一个整数数组中的所有数字,其中包含 1、2、3。例如,包含 [123,300, 456,789] 的数组 a 将给出输出 [123,300]。 在我的代码中,我使用了 ArrayList 和解决它所需的所有那些东西。仍然评估时间不达标。

public static void take(int[] a) 
{
    ArrayList<Integer> ai = new ArrayList<>();
    for(int i=0; i<a.length;i++) 
    {
        int temp =a[i];
        while(a[i]>0) 
        {
            int b=a[i]%10;
            if(b==1||b==2||b==3) 
            {
                ai.add(temp);
                break;
            }
            a[i]= a[i]/10;
        }
    }
    if(ai.isEmpty()) 
    {
        System.out.println(-1);
    }
    else 
    {
        ai.sort(null);
        System.out.println(ai);
    }
}

public static void main(String[] args) 
{
    Scanner mew = new Scanner(System.in);
    int t=mew.nextInt();
    for(int i=0; i<t;i++) 
    {
        int n=mew.nextInt();
        int a[] = new int[n];
        for(int j=0; j<n;j++) 
        {
           a[j] = mew.nextInt();
        }
        take(a);
    }
}

最佳答案

您所需要的只是将数字转换为字符串;使用 Set 检索所有字符并检查所需字符是否存在:

public static Set<Integer> take(int[] a, char[] markers) {
    Set<Integer> numbers = new TreeSet<>();

    for (int i = 0; i < a.length; i++) {
        String str = String.valueOf(a[i]);

        for (char marker : markers) {
            if (str.contains(String.valueOf(marker))) {
                numbers.add(a[i]);
                break;
            }
        }
    }

    return numbers;
}

作为替代方案,您可以使用流:

public static Set<Integer> take(int[] a, char[] markers) {
    return Arrays.stream(a)
                 .boxed()
                 .filter(val -> {
                     String str = String.valueOf(val);

                     for (char marker : markers)
                         if (str.contains(String.valueOf(marker)))
                             return true;

                     return false;
                 })
                 .sorted()
                 .collect(Collectors.toSet());
}

关于java - 我如何优化此代码以减少评估时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50597910/

相关文章:

java - 在方法内返回 True 或 false

php - 根据坐标对MySQL记录进行排序

algorithm - 如何检查双向链表是否在java中正确链接?

Java 本地方法调用没有响应

java - 使用maven UTF-8编码的源文件编译失败

algorithm - 数据结构与数据类型有何不同

验证非相交形状的自由多边形顶点的算法

python - 减少由 bool 运算符定义的嵌套字典

Java 8 流到 Map<Integer, List<String>>

java - 这是 java 中用于数据库到数据库之间数据迁移的最佳 API