Conjunto União em vetores

2 respostas
O

como mostro elementos nao repetidos qual verificacao devo fazer sendo q o vetorc esta recebendo vetora

int [] vetA = new int[3];
        int [] vetB = new int[3];
        int [] vetC = new int[6];
        
        vetA[0] = 5;
        vetA[1] = 6;
        vetA[2] = 7;
        
        vetB[0] = 5;
        vetB[1] = 4;
        vetB[2] = 8;
        
        int aux;
        
        for(int i=0; i<vetA.length; i++){
            for(int j=0; j<vetB.length; j++){
                if(vetA[i] != vetB[j]){
                    vetC[i] = vetA[i]; 

                } 
            }
        }
                
        for(int i : vetC){
        System.out.print(i);
        }

2 Respostas

C

Vc pode usar HashSet, Set é um collection q impede repetição

HashSet<Integer> vetores = new HashSet<Integer>();
//Uniao
for(int i=0; i<vetA.length; i++) {
  vetores.add(vetA[i]);
}
for(int i=0; i<vetB.length; i++) {
  vetores.add(vetB[i]);
}

//transformando em array
int [] vetC = new int[0];
vetC = vetores.toArray(vetC);

for(int i : vetC){  
  System.out.print(i);  
}

//ou

for(int i : vetores){  
  System.out.print(i);  
}
Se não puder usar collection, recomendo q use ordenação nos dois vetores, depois: obs.: esperasse q não tenha repetição nos vetores em A e em B
int k = 0;//indice de C
int j = 0;//indice de B
//para cada A
for(int i=0; i<vetA.length; i++){
  //enquando B < A, adicionar em C
  while (j < vetB.length && vetB[j] < vetA[i]) {
    vetC[k] = vetB[i];
    k++;
    j++;
  }
  //se B == A, j++; será adicionado A abaixo
  if (j < vetB.length && vetB[j] == vetA[i]) {
    j++;
  }
  //Adiciona A, dessa forma C ficará ordenado
  vetC[k] = vetA[i];
  k++;
}
//Adiciona os q sobraram em B
while(j<vetB.length) {
    vetC[k] = vetB[i];
    k++;
    j++;
}

(não testei os codigos acima)

Algoritmos de ordenação:
http://pt.wikipedia.org/wiki/Bubble_sort
http://pt.wikipedia.org/wiki/Quick_sort

C

Malz n li direito, o exemplo acima fará a União dos conjuntos
Se vc quer elementos nao repetidos então:
(Requer a ordenação)

int k = 0;//indice de C int j = 0;//indice de B //para cada A for(int i=0; i<vetA.length; i++){ //enquando B < A, adicionar em C while (j < vetB.length && vetB[j] < vetA[i]) { vetC[k] = vetB[i]; k++; j++; } //se B == A, j++ e não adiciona em C, senão adiciona C; (elementos em A q n se repetem em B) if (j < vetB.length && vetB[j] == vetA[i]) { j++; } else { vetC[k] = vetA[i]; k++; } } //Adiciona os q sobraram em B, nenhum em B é igual a A //Se considerar elementos em A q n se repetem em B, então o restante em B n deverá ser adicionado em C while(j<vetB.length) { vetC[k] = vetB[i]; k++; j++; }

Criado 28 de agosto de 2012
Ultima resposta 31 de ago. de 2012
Respostas 2
Participantes 2