2017-12-24 1 views
2

두 배열의 합집합으로 형성된 배열의 길이를 찾으려고합니다. 이런 유니온 요소를 출력 할 수는 있지만, 유니온 배열의 길이를 얻는 방법은 모른다. 어떤 아이디어?유니온 배열의 길이를 찾는다

유니온 배열의 가변 길이를 계산할 수 있습니까?

int[] array1={1,3,2,5}; 
int[] array2={4,5,1,3,2}; 

int m = array1.length, n = array2.length, k = array1.length, i = 0, flag = 0; 

int c[] = new int[m + n]; 
int d[] = new int[m]; 

for (i = 0; i < m; i++) { 
    c[i] = array1[i]; 
} 
for (i = 0; i < n; i++) { 
    for (int j = 0; j < m; j++) { 
     if (array2[i] != array1[j]) { 
      flag = 1; 
     } else { 
      flag = 0; 
      break; 
     } 
    } 
    if (flag == 1) { 
     c[k] = array2[i]; 
     k++; 
    } 
} 
int count = 1; 
for (i = 0; i < k - 1; i++) { 
    count++;   
} 
int p = 0; 
for (i = 0; i < n; i++) { 
    for (int j = 0; j < m; j++) { 
     if (array2[i] == array1[j]) { 
      flag = 1; 

      break; 
     } else { 
      flag = 0; 
     } 
    } 
    if (flag == 1) { 
     d[p] = array2[i]; 
     p++; 
    } 
} 
System.out.println("The length of the union array is: " + count); 
+0

왜 그냥하지 'array1.length + array2.length'? – ThomasEdwin

+0

@ThomasEdwin, 2 배열에 공통 요소가있는 경우 작동하지 않습니다. – Anon

+0

9가되지만 유니온 배열은 길이가 5 인 {1,2,3,4,5}입니다. –

답변

2

카운트 k + m하지 k해야한다. 그러니 그냥 교체 :

for (i = 0; i < k - 1; i++) 

for (i = 0; i < k + m - 1; i++) 

와 더 나은 솔루션 countk + m를 지정하고 인쇄하는 것입니다. 이런 식으로 뭔가 :

count = k + m; 
System.out.println("count is " + count); 
1

당신이 고유 카운트가 다음 Set를 사용하려면 다음

Set<Integer> set = new HashSet<>(); 
set.addAll(Arrays.asList(array1)); 
set.addAll(Arrays.asList(array2)); 

count = set.size(); 
+0

OP에는 고유 요소 수가 필요하지 않습니다 –

+0

유니온 배열을 사용합니까? @AniketSahrawat – ThomasEdwin

+1

'array1 = {1,3,2,5}, array2 = {4,5,1,3,2}, set = [1,2,3,4,5]'. 개수는 5가 될 것입니다. – ThomasEdwin

관련 문제