Alguém sabe como fazer para analisar os elementos de uma matriz de duas colunas e imprimir aquele que aparece um maior número de vezes?
Tentei separar em duas matrizes pra ver se ficava mais fácil mas não consegui…
Esse é o início do meu código:
Na realidade seu código nao faz o menor sentido. Possui erros sintático grosseiros que tenho certeza que vc nem conseguiu compilar. Desconsiderando isso, sua idéia é pessima, pois percorre a matriz uma 4 vezes pelo menos sendo que ainda usa loop aninhado. TOrnando o seu algoritmo de uma complexidade de n² mais ou menos.
A solução lógica, simples e facil seria vc criar uma matriz de inteiros auxiliar com a mesma dimensao da sua, um objeto do tipo Set (que seria seu conjunto) e tres variaveis auxiliar do tipo int tambem. Voce faria o seguinte: no momento que você tivesse lendo ou percorrendo sua matriz, quando vc lesse algum numero vc verificaria se ja tinha no Set (conjunto), se ja estivesse vc incrementaria a mesma posicao [i,j] na matriz auxiliar e testaria se o valor era maior que o maior valor que tava contido na variavel int auxiliar [aI1, aJ1] e max, nesse caso vc setaria os auxiliares pra receber os novos valores; e se nao fosse maior vc continuaria percorrendo a matriz. Se vc lesse um numero que nao tinha no objeto Set, aí vc adicionaria ele no conjunto e setaria a posicao [i,j] para 1. No final bastava ver qual era o valor das variaveis auxiliares e vc teria o resultado.
Ou seja, minha solucao se reduz pra um algoritmo de complexidade n. Isso é uma técnica chamada de programação dinamica.
Se tiver dificuldades pra implementar é so falar q posto o algoritmo, ele nao vai dar nem 10 linhas!!!
T
tatianaf
Estou tendo dificuldades sim… o que seria objeto do tipo set? Não entendi essa parte de verificar se o valor é maior ou não… fora isso, muito obrigada pela ajuda! Seria mt bom se vc pudesse me ajudar de novo.
betoslayer
tatianaf:
Estou tendo dificuldades sim… o que seria objeto do tipo set? Não entendi essa parte de verificar se o valor é maior ou não… fora isso, muito obrigada pela ajuda! Seria mt bom se vc pudesse me ajudar de novo.
Ok, nao vou complicar sua cabeça. To postando um algoritmo que nao usa Conjunto mas usa uma solucao muito rapida, ele é muito simples e facil, usa o esquema de programacao dinamica. Apenas poucas linhas de codigo .
importjava.util.*;/** * * @author Roberto */publicclassMatriz{publicstaticvoidmain(Stringargs[]){intlinhas;Scannerinput=newScanner(System.in);linhas=input.nextInt();intmatriz[][]=newint[linhas][2];//le a matrizfor(inti=0;i<linhas;i++)for(intj=0;j<=1;j++)matriz[i][j]=input.nextInt();//as variaves auxiliares que voce vai precisarint[]auxiliar=newint[10000];intindiceMaximo=0;//agora o algoritmo e 6 linhasfor(inti=0;i<linhas;i++)for(intj=0;j<=1;j++){intvalor=matriz[i][j];auxiliar[valor]++;if(auxiliar[valor]>auxiliar[indiceMaximo])indiceMaximo=valor;}System.out.println("O numero que aparece mais vezes é "+indiceMaximo);System.out.println("Este numero aparece "+auxiliar[indiceMaximo]+" vezes");
Entao você pode ver q a lógica ta em apenas 6 linhas. Qualquer duvida é so me falar.
Espero ter ajudado.
Andre_Brito
Opz. Post errado.
Ps.: não vai complicar a cabeça dela usando Sets e Programação Dinâmica? Nossa… imagina se quisesse hein Beto? Abraço!
betoslayer
Andre Brito:
Opz. Post errado.
Ps.: não vai complicar a cabeça dela usando Sets e Programação Dinâmica? Nossa… imagina se quisesse hein Beto? Abraço!
Entre Set e programação dinamica acho q a prog. dinamica é mais facil de compreender, porque é so logica, enquanto que usando Set a pessoa tem que conhecer a API. Esses tipos de problemas me lembram as questões de maratona de programacao da ACM que resolvia no antigo e velho C. Era foda porque tinha que implementar a estrutura de dados toda na mao. Eheheeh imagine ter que implementar toda vez que era necessario o QuickSort, Pilha ou BigNum. Acho q se soubesse java naquela época tinha sido campeao de mais torneios q participei…