최근에 해커 챌린지에 도전하여 특정 배열에서 int 쌍을 찾아야합니다. ArrayList를 접근 방식으로 사용. 누구든지이 코드의 오류를 수정할 수 있습니까?ArrayList에있는 정수 쌍 수 찾기
가 오류 : 스레드에서 예외 "주요"java.lang.IndexOutOfBoundsException : 인덱스 : 10, 크기 : 9 java.util.ArrayList.rangeCheck에서
(ArrayList.java:653) 자바에서
.util.ArrayList.remove (ArrayList.java:492)
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);
}
}
위의 접근 방식을 편집하는 동안을 것을 발견은 a
의 인덱스를 제공하므로 항상 하나의 요소 만 제거하므로 arrayList가 비어있을 때까지 첫 번째 요소가 무엇이든지 상관없이 제거 된 다음 일치하는 쌍 요소를 검색하는 방식을 시도합니다.
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
'a = ch.get (i)'이면'b'가'i'와 같은 것을 멈추게합니까? –
프로그램'a'에서'arraylist'의 크기보다 큰 숫자가 될 수 있으므로'ch.remove (a);'라는 줄에서 오류가 발생합니다. – BeginnersSake
배열에서 요소를 제거하는 다른 대안으로 검색을 방해하지 않습니다. 또한 요소를 제거하므로 다른 재귀 적 쌍의 방향으로 들어 가지 않습니다. –