Boas pessoal, tenho um trabalho pra fazer mas tou com alguns problemas em relação aos arrays, preciso de fazer operações com arrays como se fossem conjuntos:
. como tirar os elementos repetidos int num array?
. como posso fazer operações de diferença, união e intersecção entre dois arrays?
espero q me possam ajudar, preciso mesmo de ajuda…
Kra pelo q tu tais me falando tu queres implemntar uma espécie de conjunto (conceito matemático mesmo). Existe uma interface em java da API de collections q chamsse Set (conjunto em ingês), pois bem, como vc ja disse n pode usar collections, então tenta dar uma sacada nas classes q implementam essas interface e olha a implementação dos métodos q te interessam. è mais uma dica mesmo. Flw.
Cara, tem um artigo muito bom na Mundo Java deste mês que trata exatamente disso que você tá precisando. Seu professor deve ter lido e gostado do artigo
cara usar array para elementos repetidos eh complicado mao de obra danada e vc vai ficar com dor de cabeça… dar uma estuda em Collection e as classes que implementar a interface Set… olha no meu resumo que fiz para certificacao… vai lhe ajudar capitulo 7 tem exemplo que nao aceita elementos repetidos… nao passa de 10 linhas a sintaxe…
No caso de achar elementos repetidos, acho que fica mais eficiente você ordenar seu array e depois percorre-lo uma unica vez verificando se tem elemento repetido.
Seu algoritmo vai ser a (ordem do seu método de ordenação) + O(n).
Após ordenado, pegue seu primeiro elemento e saia varrendo. Enquanto for igual exclua. No momento que achar um maior, pegue-o e vá comparando do mesmo jeito que você fez com o primeiro e assim por diante.
[quote=kaabah]No caso de achar elementos repetidos, acho que fica mais eficiente você ordenar seu array e depois percorre-lo uma unica vez verificando se tem elemento repetido.
Seu algoritmo vai ser a (ordem do seu método de ordenação) + O(n).
Após ordenado, pegue seu primeiro elemento e saia varrendo. Enquanto for igual exclua. No momento que achar um maior, pegue-o e vá comparando do mesmo jeito que você fez com o primeiro e assim por diante.
Acho q pode ser por aí… :idea: [/quote]
mas no seu exemplo seria para arrays com sequencia como 1,1,2,2,2,3,3,3;
e se fossem numeros aleatorios como
1,2,5,7,9,4,1,3,6,2,5?
[quote=kaabah] [quote]mas no seu exemplo seria para arrays com sequencia como 1,1,2,2,2,3,3,3;
e se fossem numeros aleatorios como
1,2,5,7,9,4,1,3,6,2,5? [/quote]
Pois é… experimenta ordenar essa sequencia que você me passou!!
1,2,5,7,9,4,1,3,6,2,5
oredenando…
1,2,2,3,4,5,6,7,9
[/quote]
Mas como vc disse não é para manter o valor até ele se tornar maior??
Ordenar seria pelo sort então antes de começa?
[quote]No caso de achar elementos repetidos, acho que fica mais eficiente você ordenar seu array e depois percorre-lo uma unica vez verificando se tem elemento repetido.
(…)
Após ordenado, pegue seu primeiro elemento e saia varrendo. [/quote]
public class ArrayTeste {
public static int[] num = {1,1,1,2,2,2,3,3,3,3,4,4,4,4,5};
static int a = 0;
public static void main(String[] args) {
for(int i = 0 ; i < num.length; i++){
if(a < num[i]){
a = num[i];
System.out.println(a);
}
}
}
}
é possivel usar sort em Arrays?
e como eu vou pegar os valores e passar pra outra array? ou deletar da primeira?
[quote=Serafim]Boas pessoal, tenho um trabalho pra fazer mas tou com alguns problemas em relação aos arrays, preciso de fazer operações com arrays como se fossem conjuntos:
. como tirar os elementos repetidos int num array?
. como posso fazer operações de diferença, união e intersecção entre dois arrays?
espero q me possam ajudar, preciso mesmo de ajuda…[/quote]
Atenção, professores - se este código for submetido dessa maneira, não aceitem
import java.util.*;
/**
* Atenção - isto não serve para seu trabalho de escola, porque
* usa "java.util.Set" para implementar conjuntos (sets).
* Ele serve apenas para exemplificar o que você deveria ter de escrever.
*/
class Conjunto {
private Integer[] valores;
/** Auxiliar */
private static Set<Integer> valoresNaoRepetidos (Integer[] valores) {
Set<Integer> ret = new TreeSet<Integer>();
ret.addAll (Arrays.asList (valores));
return ret;
}
public static Conjunto interseccao (final Conjunto c1, final Conjunto c2) {
Set<Integer> set1 = valoresNaoRepetidos(c1.valores);
Set<Integer> set2 = valoresNaoRepetidos(c2.valores);
set1.retainAll (set2);
return new Conjunto (set1.toArray(new Integer[0]));
}
public static Conjunto uniao (final Conjunto c1, final Conjunto c2) {
Set<Integer> set1 = valoresNaoRepetidos(c1.valores);
Set<Integer> set2 = valoresNaoRepetidos(c2.valores);
set1.addAll (set2);
return new Conjunto (set1.toArray(new Integer[0]));
}
public Conjunto (Integer[] pValores) {
Set<Integer> valoresNaoRepetidos = new TreeSet<Integer>();
valoresNaoRepetidos.addAll (Arrays.asList (pValores));
valores = valoresNaoRepetidos.toArray(new Integer[0]);
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append ("{");
for (int i = 0; i < valores.length - 1; ++i) {
sb.append (valores [i]);
sb.append (", ");
}
if (valores.length >= 1) {
sb.append (valores [valores.length - 1]);
}
sb.append ("}");
return sb.toString();
}
}
class LicaoCasa2 {
public static void main(String[] args) {
Conjunto c1 = new Conjunto (new Integer[]{3, 1, 4, 1, 5, 9, 2, 6});
Conjunto c2 = new Conjunto (new Integer[]{2, 7, 1, 8, 2, 8, 1, 8});
System.out.println (c1);
System.out.println (c2);
System.out.println (Conjunto.uniao (c1, c2));
System.out.println (Conjunto.interseccao (c1, c2));
}
}