Java 计算deque中最大唯一值数的最快方法

Java 计算deque中最大唯一值数的最快方法,java,optimization,count,unique,deque,Java,Optimization,Count,Unique,Deque,我试图找到一种最快的方法来计算从控制台获取的一系列n个整数的m大小子数组中唯一值的最大数量。有没有办法进一步优化这段代码?谢谢,这是事先准备好的,亚历克斯 import java.util.*; public class test { public static void main(String[] args) { Scanner in = new Scanner(System.in); Deque deque = new ArrayDeque<&

我试图找到一种最快的方法来计算从控制台获取的一系列n个整数的m大小子数组中唯一值的最大数量。有没有办法进一步优化这段代码?谢谢,这是事先准备好的,亚历克斯

import java.util.*;
public class test {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Deque deque = new ArrayDeque<>();
        int n = in.nextInt();
        int m = in.nextInt();
        long count = 0, c = 0;

        for (int i = 0; i < m; i++) deque.addFirst(in.nextInt());
        count = deque.stream().distinct().count();
        for (int i = 0; i < n - m; i++) {
            count = Math.max(count, deque.stream().distinct().count());

            deque.removeLast();
            deque.addFirst(in.nextInt());
        }
        System.out.println(count);
    }
}
import java.util.*;
公开课考试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
Deque Deque=新的ArrayDeque();
int n=in.nextInt();
int m=in.nextInt();
长计数=0,c=0;
对于(inti=0;i
这是O(NM)(假设
不同的
是O(M))。通过跟踪窗口中当前计数为非零的值的数量,应该可以在O(N)中实现这一点

伪代码:

for (int i = M; i < N; i++) {
    counts[x[i-M]]--;
    if (counts[x[i-M]] == 0) {
        nonzero--;
    }

    if (counts[x[i]] == 0) {
        nonzero++;
    }
    counts[x[i]]++;

    maxNonzero = max(maxNonzero, nonzero);
}
for(int i=M;i
只有最大值存储在
count
变量中,因此我认为不需要任何额外的逻辑。啊,是的,对不起,没有正确读取代码!这里只需要一些小细节。这可以用相对较小的数字来实现。此解决方案应更改为附加的
HashMap
结构,以便进一步优化。