2017-02-17 2 views
-1

최근에 해커 챌린지에 도전하여 특정 배열에서 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 
+1

'a = ch.get (i)'이면'b'가'i'와 같은 것을 멈추게합니까? –

+0

프로그램'a'에서'arraylist'의 크기보다 큰 숫자가 될 수 있으므로'ch.remove (a);'라는 줄에서 오류가 발생합니다. – BeginnersSake

+0

배열에서 요소를 제거하는 다른 대안으로 검색을 방해하지 않습니다. 또한 요소를 제거하므로 다른 재귀 적 쌍의 방향으로 들어 가지 않습니다. –

답변

1
int a = ch.get(i); 

이 위치의 값을 취득한다 제가

ch.remove(a); 

이 인덱스 a에 저장된 값을 제거한다. 값 a은 ArrayList 크기보다 클 수 있습니다.

여기가 잘못 될 것입니다. 그것을 주석 처리 해보세요, 어쩌면 작동할까요?

+0

저는 한 쌍의 요소가있는 경우 쌍을 제거하여 찾기 및 제거 과정을 다시 시작한다는 접근법을 사용하고 있습니다. 이러한 방식으로 재귀 적 쌍을 찾는 가능성이 제거됩니다. –