我使用位操作但速度不够快?是因为Scanner class吗?

I using bit manipulation but it isn't quick enough? Is it because of Scanner class?

这是问题:

https://practice.geeksforgeeks.org/problems/find-the-odd-occurence/0

Given an array of positive integers where all numbers occur even number of times except one number which occurs odd number of times. Find the number.


输入范围为

1 ≤ T ≤ 100 : Test Cases
1 ≤ N ≤ 107 : Number of inputs
1 ≤ A[i] ≤ 106 : Inputs


示例:

Input:

1
5
8 4 4 8 23

Output:

23

这是代码:

class GFG
 {
    public static void main (String[] args)
     {
     //code
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while(t-->0){
              int N = sc.nextInt();
              int count = 0;
              for(int j = 0; j<N; j++){
                  int in = sc.nextInt();
                 count =count^in;
              }
              System.out.println(count);
        }

    }
}

我的问题是,OJ 花了 2.5s 来执行它,而其他人执行此操作的时间比我的少得多。有些人在 0.3s 内完成。这也包括在数组中输入数字,然后遍历它们。


这是为什么,这是因为 OJ 还是什么,我没听懂? 我也做了几次提交,只是为了确定是否有错误,但每次都需要超过 2.5 秒。

现代 Java 被认为是相当快的,如果你编写优化代码,但它仍然比在更低级别交互并具有提前编译器的语言慢。无论如何,这个主题在这里有一个非常详细的答案:Is Java really slow?.

但是您的 java 代码仍然可以通过使用 BufferedReader 而不是直接使用 Scanner 来优化。 Scanner 实际上接受一个输入流,然后根据我们尝试获取的数据类型进行解析,但是 BufferedReader 只是给你一个原始输入,不做任何操作。因此,如果您使用它并单独解析您的原始输入行,那么它对您的代码运行时来说会好得多。使用 BufferedReader :

对您的代码稍作修改后,我能够获得 0.61s
import java.util.*;
import java.io.*;
class gfg
{
    public static void main(String args []) throws IOException
    {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw=new PrintWriter(System.out, true);
        int t=Integer.parseInt(br.readLine());
        while(t-->0)
        {
            int N = Integer.parseInt(br.readLine());
            String str[]=br.readLine().split(" ");
            int count = 0;
            for(int j = 0; j<N; j++){
                int in = Integer.parseInt(str[j]);
                count =count^in;
              }
              System.out.println(count);
        }

    }
}

我认为通过更多的优化,您可能可以将时间缩短到几乎与 0.3 秒相当。