2017-10-26 5 views
-1

그래서, 내 작업은 두 개의 배열을 교차시키는 것이지만 최종 결과에는 2 개의 반복되는 요소가 허용되지 않습니다. 나는이 코드를 얻었지만, 각 배열에 2 개의 동일한 숫자가 있으면 최종 결과에서 둘 다 나타나기 때문에 작업을 만족시키지 못한다. 어떤 제안?2 개의 배열의 교차 결과의 두 개의 반복 숫자

static void printIntersection(int[] arr1, int[] arr2) { 
    int m = arr1.length; 
    int n = arr2.length; 
    int i = 0, j = 0; 

    while ((i < m) && (j < n)) { 
     if (arr1[i] == arr2[j]) { 
      System.out.print(arr1[i] + " "); 
      i++; 
      j++; 
     } else if (arr1[i] < arr2[j]) 
      i++; 
     else 
      j++; 
    } 
} 

static void printArray(int[] arr) { 
    for (int i = 0; i < arr.length; i++) 
     System.out.print(arr[i] + " "); 
    System.out.println(); 
} 

public static void main(String[] args) { 
    int[] arr1 = {1, 2, 2, 4, 5, 6}; 
    int[] arr2 = {2, 2, 3, 5, 7}; 

    System.out.println("Array1:"); 
    printArray(arr1); 

    System.out.println("Array2:"); 
    printArray(arr2); 

    System.out.println("Union:"); 
    System.out.println(); 

    System.out.println("Intersection:"); 
    printIntersection(arr1, arr2); 
    System.out.println(); 
} 

답변

0

중복 요소가 있는지 확인하려면 list/array을 유지해야합니다.

static void printIntersection(int[] arr1, int[] arr2) { 
     List<Integer> list = new ArrayList<>(); 
     int m = arr1.length; 
     int n = arr2.length; 
     int i=0,j=0; 

     while((i<m) && (j<n)) { 
      if(arr1[i] == arr2[j]) { 
       if(!list.contains(arr1[i])) 
       { 
        System.out.print(arr1[i] + " "); 
        list.add(arr1[i]); 
       } 
       i++; 
       j++; 
      } 
      else if(arr1[i] < arr2[j]) 
       i++; 
      else 
       j++; 
     } 
    } 

N.B이 : 나는 당신의 알고리즘을 테스트하지 않은 : ArrayList를 사용 는 옵션입니다.

0

이 부분에 문제가 있습니다. arr1의 요소가 arr2의 요소와 일치하면 이 인쇄되어 두 개의 카운터가 증가합니다.

if(arr1[i] == arr2[j]) { 
    System.out.print(arr1[i] + " "); 
    i++; 
    j++; 
} 

조건은 위의 arr1에서 중복 요소 자체에 대해 아무것도 말하지 않는다. 더 많은 조건을 추가하여 처리해야합니다.

입력 배열이 정렬 된 것처럼 보입니다. arr1의 요소가 이전의 다른 경우이 경우 , 당신은 예를 들어, 단지 값을 출력하고 j를 증가에 조건을 추가 할 수

if (arr1[i] == arr2[j]) { 
    if (i == 0 || arr1[i - 1] != arr1[i]) { 
     System.out.print(arr1[i] + " "); 
     j++; 
    } 
    i++; 
} 
+0

감사합니다! 그것은 작동합니다. –

+0

@VIKOManafov 네. 그렇다면 아마 그것을 받아 들일 수 있습니다. – janos