可能なすべての連続したサブ配列の中から一意の整数の最大数を見つけるアルゴリズムは、大量の整数とサブ配列では機能しません。たとえば、コンソールから合計6 個の整数を読み取る必要があり、各サブアレイのサイズは3です。したがって、この種の入力 5 3 5 2 3 2 に対して、私のプログラムは3を出力し、これは正常に動作します。最初のサブ配列には 5 3 5 が格納されるため、一意の整数の数は2です。2 番目のサブ配列には 3 5 2 が格納されるため、一意の整数の数は3になります。5 2 3 などを格納するため、3 番目のサブ配列も 3 を出力します...
しかし、私のアルゴリズムは、サブ配列サイズが99877の合計100000整数を処理できないようです。私が間違ったことを誰かが説明してくれますか?
参考: LinkedList や ArrayDeque などの Deque 実装を使用する必要があります
for (int i = 0; i < totalAmountOfIntegers; i++) {
int anyIntegerNumber = consoleInput.nextInt();
arrayDequeToStoreAllIntegers.addLast(anyIntegerNumber);
hashSetToStoreUniqueIntegers.add(anyIntegerNumber);
if (arrayDequeToStoreAllIntegers.size() == sizeOfEachArrayDequeAsSubArray) {
if (hashSetToStoreUniqueIntegers.size() > quantityOfUniqueIntegersInSubarray) {
quantityOfUniqueIntegersInSubarray = hashSetToStoreUniqueIntegers.size();
}
int firstNumberInDeque = arrayDequeToStoreAllIntegers.remove();
if (hashSetToStoreUniqueIntegers.size() == sizeOfEachArrayDequeAsSubArray) {
hashSetToStoreUniqueIntegers.remove(firstNumberInDeque);
}
}
}