2014-07-01 3 views
-1

두 개의 정수 배열이 있고 중복없이 병합하려고한다고 가정합니다.내장 함수를 사용하지 않고 중복없이 Java에서 배열을 병합하는 방법은 무엇입니까?

내가 세트에 추가 할 수 있고 arraylist로 검색 할 수 있음을 알고 있습니다.

그러나 내장 함수를 사용하지 않고 어떻게 할 수 있습니까?

+1

이것은 자바보다는 알고리즘 문제의 더를 제공한다 one – fejese

+0

당신은 Set과 ArrayList를 사용하고 있으므로, 당신은 그것들에 대해 inbuilt 함수를 사용해야 할 것입니다. –

+1

결합 된 크기의 배열을 만들고, 두 배열을 추가하고, 정렬하고, 반복하고, 이전 배열과 다른 각 요소를 새 배열에 추가합니다. _ 무엇을 시도 했습니까? 그리고 정말로, 왜 당신은 내장 된 방법을 사용하고 싶지 않을까요? –

답변

1

코드를 많이하지만, 여기에 샘플입니다 ..

try{ 
     int[] a = {1,2,3,4,5,6,7}; 
     int[] b = {5,6,7,8,9,10}; 
     int[] c = new int[a.length+b.length]; 
     int[] fin = new int[a.length+b.length]; 
     int i = 0; 
     for(int j : fin){ 
      fin[i++] = -1; 
     } 
     i = 0; 
     for(int j : a){ 
      c[i++] = j; 
     } 
     for(int j : b){ 
      c[i++] = j; 
     } 
     boolean check = false; 
     for(int j = 0,k = 0; j < c.length; j++){ 
      for(int l : fin){ 
       if(l == c[j]) 
        check = true; 
      } 
      if(!check){ 
       fin[k++] = c[j]; 
      } else check = false; 
     } 

    } catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
+0

만약 우리가 a와 b를 바꾼다면? int [] b = {1, 2, 3, 4, 5, 6, 7}와 같이 입력하십시오. \t \t \t int [] a = {1, 2, 7, 8, 9, 10}; –

1

배열에 요소 순서가 있으므로 병합 방법에 따라 다릅니다.

다른 하나 (가장 쉬운 것) 또는 "zip"한 개를 추가 할 수 있습니다 (A에서 하나, B에서 하나, A에서 다른 하나 등).

주된 문제점은 추가하려고하는 값이 이미 포함되어 있는지 여부를 새 어레이에서 확인해야한다는 것입니다. 이것은 Set과 같은 내장 함수와 구현을 사용하면 가장 쉽습니다. HashSet과 같은 Set 구현체가 있습니다.이 구현체는 값을 찾고 삽입하는 일정 시간 성능을 제공합니다.

나는 "평범한"방법으로 휠을 다시 시도하지 말라고 조언합니다.

static int[] merge(int[] a, int[] b) { 
    Set<Integer> set = new HashSet<>(Arrays.asList(a)); 
    set.addAll(Arrays.asList(b)); // skips duplicate as per Set implementation 

    return set.toArray(new int[0]); 
} 

이것은 중복 및 내장 방법을 모두 사용하지만 명확하고 간결입니다 :

나는이 꽤 읽을 찾을 수 있습니다.

+0

예, 가장 쉬운 구현 것입니다 of Sets하지만 내장 함수를 사용하지 말라는 요청을 받았습니다. 그것은 시험입니다. – user2704903

+0

음, 숙제를 게시하지 마십시오. "기본 제공 함수"는 무엇을 의미합니까? ArrayList를 사용할 수 있습니까? – Davio

1
private Set<Integer> mergeWithoutDuplicates(int[] a, int[] b) { 
    Set<Integer> set1= new HashSet<Integer>(a.length+b.length); 
    for (int i=0; i<a.length; i++) { 
     set1.add(a[i]); 
    } 
    for (int i=0; i<b.length; i++) { 
     set1.add(b[i]); 
    } 
    return set1; 

}

이 기능은 목적

관련 문제