2017-12-24 5 views
2

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