/ Nájdenie počtu dvojíc celých čísiel v ArrayList - java, arraylist

Hľadanie počtu dvojíc celých čísiel v ArrayList - java, arraylist

Nedávno narazil na hackerrank výzvu, musel nájsť pár int v danom poli. Použitie funkcie ArrayList ako prístup. Môže ktokoľvek opraviť chyby v tomto kóde.

Chyba: Výnimka vo vlákne "main" java.lang.IndexOutOfBoundsException: Index: 10, Veľkosť: 9

na java.util.ArrayList.rangeCheck (ArrayList.java:653)

na java.util.ArrayList.remove (ArrayList.java:492)

na Solution.main (Solution.java:32)

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int c[] = new int[n];
for(int c_i=0; c_i < n; c_i++){
c[c_i] = in.nextInt();
}
int count=0;

Arrays.sort(c);

ArrayList<Integer> ch = new ArrayList<>();

for(int c_i=0; c_i < n; c_i++){
ch.add(c[c_i]);
}

for(int i=0;i<ch.size();i++){
int a = ch.get(i);
int b=ch.indexOf(a);
if(b<0)
continue;
else{
ch.remove(a);
ch.remove(b);
count++;
for (int j=0;j<ch.size()-2;j++){
ch.add(j,ch.get(j+2));

}
}
System.out.println(count);
}

}

Upravil vyššie uvedený prístup a zároveň to zistil b bude dávať index a odstránenie iba jedného prvku vždy, takže sa teraz pokúsil prístup, že prvý prvok sa odstráni bez ohľadu na to, čo a potom hľadá zodpovedajúci prvok pár, kým je arrayList prázdny.

while(ch.size()!=0){
int a = ch.get(0);
ch.remove(0);
int b = ch.indexOf(a);
if(b<0){

for (int j=0;j<ch.size()-1;j++)
ch.add(j,ch.get(j+1));
continue;
}
else{

ch.remove(b);
count++;
for (int j=0;j<ch.size()-2;j++)
ch.add(j,ch.get(j+2));
}
}



Error: Terminated due to timeout

odpovede:

1 pre odpoveď č. 1
int a = ch.get(i);

Tým sa získa hodnota na mieste i

ch.remove(a);

Tým sa odstráni hodnota uložená v indexe a, Hodnota a by mohlo byť väčšie ako veľkosť ArrayList.

To je miesto, kde sa dejete. Pokúste sa to komentovať, možno to bude fungovať